替换所有字母 - 解释

时间:2014-02-07 12:49:56

标签: php regex preg-replace

我想修改一个字符串并删除所有英文字母(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);

我理解第二个答案,但不是第一个答案。第一个投票率最高。

第一个是更好的答案吗?请解释一下它在做什么。

2 个答案:

答案 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包含以下属性:LlLmLoLtLu(请查看完整列表documentation)。这意味着,L将包括:

  • 小写字母(Ll
  • 修饰符字母(Lm
  • 其他字母(Lo
  • 标题大小写字母(Lt
  • 大写字母(Lu

这意味着,\PL更符合要求“除字母以外的所有内容”,但它会保留法语字母(因为Lm),而[a-zA-Z](与{{相同) 1}}}更严格,只留下在组中指定的字母。

当然,/[a-z]/i仅在unicode方面有意义,因此 - \P{xx}修饰符在那里是强制性的。