0
preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);

这里它匹配所有的西里尔文和拉丁文字符,为什么它们没有被过滤?,文件编码是 utf-8,我做错了什么?

4

2 回答 2

5

利用:

/^(?:\p{Cyrillic}+|\p{Latin}+)$/, 进行分组以只允许一种类型的字符。

\p{Cyrillic}, 它匹配任何西里尔字符..

\p{Latin},它匹配任何拉丁字符。

如果您只需要整个字符串中的英文字符:

利用:

preg_match_all('/[\p{Latin}]+/u', 'АБВГД ENGLISH STRING', $matches);
print_r($matches);

它将返回所有英文匹配项。

于 2013-10-01T10:33:10.660 回答
1

\p{L}在 RegEx 中匹配 Unicode 类别(L 是类别字母)。这就是为什么您的正则表达式匹配所有字母符号,包括西里尔字母。

如果您只想获取拉丁语,请使用\p{Latin}所有 unicode 拉丁符号,或a-z仅匹配 ASCII 符号

于 2013-10-01T10:33:47.200 回答