[已解决] 如果有人遇到此问题,将修饰符添加/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`