Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_匹配不区分拉丁字符和西里尔字符_Php - Fatal编程技术网

Php preg_匹配不区分拉丁字符和西里尔字符

Php preg_匹配不区分拉丁字符和西里尔字符,php,Php,这里它匹配所有西里尔语和拉丁语字符,为什么不过滤?文件编码是utf-8,我做错了什么?使用: /^(?:\p{西里尔语}+|\p{拉丁语}+$/,进行分组以仅允许一种类型的字符 \p{西里尔文},它匹配任何西里尔文字符 \p{Latin},它匹配任何拉丁字符 如果整个字符串中只需要英文字符: 使用: 它将返回所有英文匹配项。使用: /^(?:\p{西里尔语}+|\p{拉丁语}+$/,进行分组以仅允许一种类型的字符 \p{西里尔文},它匹配任何西里尔文字符 \p{Latin},它匹配任何拉丁字符

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

使用:

/^(?:\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);