preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
這裏所有的字符西里爾語和拉丁語,爲什麼他們沒有過濾匹配?文件編碼爲UTF-8,有什麼我'做錯了什麼?的preg_match分不清拉丁和西裏爾字母
preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
這裏所有的字符西里爾語和拉丁語,爲什麼他們沒有過濾匹配?文件編碼爲UTF-8,有什麼我'做錯了什麼?的preg_match分不清拉丁和西裏爾字母
用途:
/^(?:\p{Cyrillic}+|\p{Latin}+)$/
,做分組只允許一個char類型。
\p{Cyrillic}
,它匹配任何西里爾字符..
\p{Latin}
,任何拉丁字符相匹配。
,如果你需要在整個字符串英文字符:
使用:
preg_match_all('/[\p{Latin}]+/u', 'АБВГД ENGLISH STRING', $matches);
print_r($matches);
這將返回所有英語比賽。
嗯,如果我在字符串西里爾文和拉丁字符,我沒有得到匹配,即使有字符串中的西里爾文,我可以只獲得英文嗎? –
哇這個更好用,謝謝!!! –
\p{L}
在RegEx中匹配Unicode類別(L是類別Letter)。 這就是爲什麼你的正則表達式匹配所有字母符號,包括西里爾文。
如果你想要得到的只是拉美,使用\p{Latin}
進行所有的Unicode拉丁字符,或a-z
匹配只是ASCII符號
嗯,如果我在字符串西里爾文和拉丁字符,我沒有得到匹配,即使在字符串中有西裏爾字母,我能得到只有英文嗎? –
讓我看看你的新正則表達式 –
preg_match('/^[\ p {拉丁} \ s] + $/u','АБВГДEnglish',$ matches) –
因爲'preg_match'進行匹配,而不是過濾。我想你需要'preg_replace'而不是 –
我的意思是匹配在$ matches變量中,我只需要獲取拉丁字符匹配,修飾符{L}僅表示拉丁字符,但這不起作用,我可以' t明白爲什麼 –
@yeahitsme:不,'\ p {L}'表示*任何字母*。代碼正常工作。 – Jon