在版本5.3.4-5.5.0beta1中,有\w
和\pL
等效嗎?PHP中的正則表達式元字符 w和 pL
<?php
preg_match_all('#\w#u','سیب',$f);
var_dump($f);
preg_match_all('#\pL#u','سیب',$f);
var_dump($f);
array(1) {
[0]=>
array(3) {
[0]=>
string(2) "س"
[1]=>
string(2) "ی"
[2]=>
string(2) "ب"
}
}
array(1) {
[0]=>
array(3) {
[0]=>
string(2) "س"
[1]=>
string(2) "ی"
[2]=>
string(2) "ب"
}
}
Try the above snippet in the Online PHP shell
完美的答案的任何字符。在php中打開u標誌就像在你的正則表達式的前面添加(* UCP)(* UTF8)。可悲的是,從PCRE 8.34開始,無法關閉PCRE_UCP內聯。我說「可悲」,因爲這會讓\ w運行速度變慢,按照PCRE手冊:「通過Unicode屬性匹配字符並不是很快,因爲PCRE必須執行多級表查找才能找到字符的屬性,這就是爲什麼傳統的轉義序列(如\ d和\ w)默認情況下不使用PCRE中的Unicode屬性,儘管您可以通過設置PCRE_UCP選項或通過(* UCP)啓動模式來實現這種轉換「 – zx81
實際上,有一種解決方法爲了使UTF8沒有UCP:設置UTF8內聯,而不是使用u標誌。例如:「〜(* UTF8)\ w +〜」這確保unicode模式已打開,但\ w不匹配\ p {L} – zx81