我想修改一个字符串并删除所有英文字母(a-z,A-Z)。请注意,还应删除空格。
这篇文章提供了两个答案Remove everything except letters from PHP string
$new_string = preg_replace('/\PL/u', '', $old_string)
$new_string = preg_replace('/[^a-z]/i','',$old_string);
我理解第二个答案,但不是第一个答案。第一个投票率最高。
第一个是更好的答案吗?请解释一下它在做什么。
答案 0 :(得分:1)
\pL
是字母
的unicode属性
\pN
是数字的unicode属性
[a-z]不会照顾éàçè....
how can i use preg_match with alphanumeric and unicode acceptance?
答案 1 :(得分:1)
这意味着特殊的unicode-character类限定符。在这种特殊情况下,L
表示“字母”。在PHP中,\P{xx}
可用,因此/\PL/u
将起作用。
请注意,L
包含以下属性:Ll
,Lm
,Lo
,Lt
和Lu
(请查看完整列表documentation)。这意味着,L
将包括:
Ll
)Lm
)Lo
)Lt
)Lu
)这意味着,\PL
更符合要求“除字母以外的所有内容”,但它会保留法语字母(因为Lm
),而[a-zA-Z]
(与{{相同) 1}}}更严格,只留下在组中指定的字母。
当然,/[a-z]/i
仅在unicode方面有意义,因此 - \P{xx}
修饰符在那里是强制性的。