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

這裏所有的字符西里爾語和拉丁語,爲什麼他們沒有過濾匹配?文件編碼爲UTF-8,有什麼我'做錯了什麼?的preg_match分不清拉丁和西裏爾字母

+0

因爲'preg_match'進行匹配,而不是過濾。我想你需要'preg_replace'而不是 –

+0

我的意思是匹配在$ matches變量中,我只需要獲取拉丁字符匹配,修飾符{L}僅表示拉丁字符,但這不起作用,我可以' t明白爲什麼 –

+0

@yeahitsme:不,'\ p {L}'表示*任何字母*。代碼正常工作。 – Jon

回答

5

用途:

/^(?:\p{Cyrillic}+|\p{Latin}+)$/,做分組只允許一個char類型。

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

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

,如果你需要在整個字符串英文字符:

使用:

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

這將返回所有英語比賽。

+0

嗯,如果我在字符串西里爾文和拉丁字符,我沒有得到匹配,即使有字符串中的西里爾文,我可以只獲得英文嗎? –

+0

哇這個更好用,謝謝!!! –

1

\p{L}在RegEx中匹配Unicode類別(L是類別Letter)。 這就是爲什麼你的正則表達式匹配所有字母符號,包括西里爾文。

如果你想要得到的只是拉美,使用\p{Latin}進行所有的Unicode拉丁字符,或a-z匹配只是ASCII符號

+0

嗯,如果我在字符串西里爾文和拉丁字符,我沒有得到匹配,即使在字符串中有西裏爾字母,我能得到只有英文嗎? –

+0

讓我看看你的新正則表達式 –

+0

preg_match('/^[\ p {拉丁} \ s] + $/u','АБВГДEnglish',$ matches) –