AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting (https://forums.alliedmods.net/forumdisplay.php?f=107)
-   -   Can't compile regex expression. (https://forums.alliedmods.net/showthread.php?t=309240)

T1MOXA 07-18-2018 15:34

Can't compile regex expression.
 
Code:

#include <regex>
public void OnPluginStart() {
    PrintToServer("%i", CompileRegex("[\x{D800}-\x{DBFF}]", PCRE_CASELESS));
}

Return: 0

What am I doing wrong ?

UPD.
the same proplem with "[\\x{D800}-\\x{DBFF}]" expression.

Dr!fter 07-18-2018 16:33

Re: Can't compile regex expression.
 
How about you, idk, use the error params...

PHP Code:

Regex CompileRegex(const char[] patternint flagschar[] errorint maxLenRegexErrorerrcode

Ill just add, that you should use SM 1.9 for those (since they were broken previously)

T1MOXA 07-18-2018 16:47

Re: Can't compile regex expression.
 
Quote:

Originally Posted by Dr!fter (Post 2604638)
How about you, idk, use the error params...

PHP Code:

Regex CompileRegex(const char[] patternint flagschar[] errorint maxLenRegexErrorerrcode

Ill just add, that you should use SM 1.9 for those (since they were broken previously)

Thanks...

PHP Code:

#include <regex>

public void OnPluginStart() {
    
char sError[128];
    
RegexError rError;
    
Handle hExpression CompileRegex("[\\x{D800}-\\x{DBFF}]"PCRE_UCPsErrorsizeof(sError), rError);
    
PrintToServer("Regex: %i | Error: %s | RegexError: %i"hExpressionsErrorrError);


Regex: 0 | Error: this version of PCRE is not compiled with Unicode property support | RegexError: 16

sm exts list
Regex (1.9.0.6241): Provides regex natives for plugins

With PCRE_CASELESS flag:
Regex: 0 | Error: character value in \x{...} sequence is too large | RegexError: 3

asherkin 07-18-2018 18:22

Re: Can't compile regex expression.
 
The root of your problem seems to be:

Quote:

Constraints on character values

Characters that are specified using octal or hexadecimal numbers are limited to certain values, as follows:

8-bit non-UTF mode less than 0x100
8-bit UTF-8 mode less than 0x10ffff and a valid codepoint
16-bit non-UTF mode less than 0x10000
16-bit UTF-16 mode less than 0x10ffff and a valid codepoint
32-bit non-UTF mode less than 0x100000000
32-bit UTF-32 mode less than 0x10ffff and a valid codepoint

Invalid Unicode codepoints are the range 0xd800 to 0xdfff (the so-called "surrogate" codepoints), and 0xffef.
https://www.pcre.org/original/doc/html/pcrepattern.html

T1MOXA 07-18-2018 20:44

Re: Can't compile regex expression.
 
Thanks, but I'm not sure what it gives me...
By the way, here this expression works as it should.
From your answer I understood that most likely to do what I want using regex is not possible ?
Perhaps there is an alternative option as find emoticons in the text and remove their ?

Dr!fter 07-19-2018 11:04

Re: Can't compile regex expression.
 
Regex re = new Regex("[\\pSo]", PCRE_UTF8, error, sizeof(error), iError);

Seems to work here is a list of what it captures.
https://www.fileformat.info/info/uni...ry/So/list.htm

T1MOXA 07-20-2018 20:36

Re: Can't compile regex expression.
 
Unfortunately, this rule removes too many characters.
I am writing this regular expression to remove those characters from nicknames which do not properly send to the MySQL server.

To avoid such errors:
Incorrect string value: '\xF0\x9F\x98\x88 6...' for column 'name' at row 1

asherkin 07-20-2018 20:40

Re: Can't compile regex expression.
 
You should really consider switching to the utf8mb4 charset.

T1MOXA 07-20-2018 22:11

Re: Can't compile regex expression.
 
Then I'll have to rewrite all plugins and web interfaces to a different encoding...
And in general it is interesting why this rule does not work in sourcemod but it works on the regex101.

asherkin 07-21-2018 05:38

Re: Can't compile regex expression.
 
No you won’t, the input/output is still UTF-8, it just allows characters outside of the BMP to be stored.


All times are GMT -4. The time now is 02:40.

Powered by vBulletin®
Copyright ©2000 - 2022, vBulletin Solutions, Inc.