Php preg_匹配不区分拉丁字符和西里尔字符
这里它匹配所有西里尔语和拉丁语字符,为什么不过滤?文件编码是utf-8,我做错了什么?使用:Php preg_匹配不区分拉丁字符和西里尔字符,php,Php,这里它匹配所有西里尔语和拉丁语字符,为什么不过滤?文件编码是utf-8,我做错了什么?使用: /^(?:\p{西里尔语}+|\p{拉丁语}+$/,进行分组以仅允许一种类型的字符 \p{西里尔文},它匹配任何西里尔文字符 \p{Latin},它匹配任何拉丁字符 如果整个字符串中只需要英文字符: 使用: 它将返回所有英文匹配项。使用: /^(?:\p{西里尔语}+|\p{拉丁语}+$/,进行分组以仅允许一种类型的字符 \p{西里尔文},它匹配任何西里尔文字符 \p{Latin},它匹配任何拉丁字符
/^(?:\p{西里尔语}+|\p{拉丁语}+$/
,进行分组以仅允许一种类型的字符
\p{西里尔文}
,它匹配任何西里尔文字符
\p{Latin}
,它匹配任何拉丁字符
如果整个字符串中只需要英文字符:
使用:
它将返回所有英文匹配项。使用:
/^(?:\p{西里尔语}+|\p{拉丁语}+$/
,进行分组以仅允许一种类型的字符
\p{西里尔文}
,它匹配任何西里尔文字符
\p{Latin}
,它匹配任何拉丁字符
如果整个字符串中只需要英文字符:
使用:
它将返回所有英文匹配项。
\p{L}
在正则表达式中匹配Unicode类别(L是类别字母)。
这就是为什么正则表达式匹配所有字母符号,包括西里尔字母
如果您只想获得拉丁语,请对所有unicode拉丁语符号使用
\p{latin}
,或使用a-z
仅匹配ASCII符号\p{L}
在正则表达式中匹配unicode类别(L是类别字母)。
这就是为什么正则表达式匹配所有字母符号,包括西里尔字母
如果只想获取拉丁语,请对所有unicode拉丁语符号使用
\p{latin}
,或者使用a-z
仅匹配ASCII符号,因为preg_match
执行匹配,而不是过滤。我想你需要preg_replace
instead意味着匹配在$matches变量中,我只需要匹配拉丁字符,修饰符{L}意味着只匹配拉丁字符,但这不起作用,我无法理解why@yeahitsme:不,\p{L}
表示任何字母。代码正常工作。因为preg\u match
执行匹配,而不是过滤。我想你需要preg_replace
instead意味着匹配在$matches变量中,我只需要匹配拉丁字符,修饰符{L}意味着只匹配拉丁字符,但这不起作用,我无法理解why@yeahitsme:不,\p{L}
表示任何字母。代码正常工作。hmmm如果我的字符串中有西里尔字母和拉丁字母,我没有得到匹配,即使字符串中有西里尔字母,我也只能得到英语吗?给我看你的新regexpreg_匹配('/^[\p{Latin}\s]+$/u',АБГБББenglish',$matches)preg_匹配('/[\p{Latin}\s]+/嗯,如果我的字符串中有西里尔字母和拉丁字母,我没有匹配,即使字符串中有西里尔字母,我也只能得到英语吗?给我看你的新regexpreg_匹配('/^[\p{Latin}\s]+$/u',АБСГenglish',$matches)preg_匹配('/[\p{Latin}\s]+/嗯,如果我的字符串中有西里尔字母和拉丁字母,我就没有匹配项,即使字符串中有西里尔字母,我也只能得到英语吗?嗯,如果我的字符串中有西里尔字母和拉丁字母,我就没有匹配项,即使字符串中有西里尔字母,我也只能得到英语吗?
preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
preg_match_all('/[\p{Latin}]+/u', 'АБВГД ENGLISH STRING', $matches);
print_r($matches);