1

[已解决] 如果有人遇到此问题,将修饰符添加/u到正则表达式可解决此问题。在评论中感谢 MI :)

考虑以下代码:

var_dump('Trimiteţi');
preg_match('/^([\p{L}]+)/', 'Trimiteţi', $matches);
print_r($matches);

我正在使用它来过滤可能包含非拉丁字符的单词\p{L},还请注意,我没有使用结尾字符串$正则表达式符号preg_match

现在问题来了,在本地执行代码时,我收到以下输出:

string 'Trimiteţi' (length=10)
Array ( [0] => TrimiteÅ [1] => TrimiteÅ )

我尝试在PHP 沙箱中执行代码,它输出类似的内容:

string(10) "Trimiteţi"
Array
(
    [0] => Trimite�
    [1] => Trimite�
)

请注意,至少这一次它没有破坏原来的var_dump单词。

到底是怎么回事?为什么使用 preg_match 会改变单词?最糟糕的是,如果我添加$到正则表达式的末尾,它将NOT MATCH,因为我认为这些转换后的符号不能被解释为字符串结尾或其他东西。请帮我

编辑:我正在运行的文件编码设置为 "text/x-php; charset=utf-8"
Edit2: 另外,我使用了 regex101.com,当使用 REGULAR EXPRESSION "^[\p{L}] +$" 和单词 "Trimiteţi" 似乎匹配。您甚至可以将正则表达式切换为“^([\p{L}]+)$”,添加捕获组,然后站点输出:

MATCH 1
1.  [0-9]   `Trimiteţi`
4

0 回答 0