【问题标题】:PHP PREG Regex: What does "\W" mean when using the UTF-8 modifier?PHP PREG 正则表达式:使用 UTF-8 修饰符时“\W”是什么意思?
【发布时间】:2011-01-02 15:54:57
【问题描述】:

我知道在正常的php regex(ASCII 模式)中,“\w”(单词)表示“字母、数字和 _”。但是,当您将多字节正则表达式与 the "u" modifier 一起使用时,这意味着什么?

preg_replace('/\W/u', '', $string);

【问题讨论】:

  • 你的意思是\w而不是\W吗?
  • 嗯,我实际上是指他们两个 - 但我将我的问题固定为 \w

标签: php regex utf-8 pcre


【解决方案1】:

任何不是字母、数字或下划线的东西。

因此,就 Unicode 字符类而言,\W 等同于不在 L 或 N 字符类中且不是下划线字符的每个字符。

如果您要使用\p{xx} 语法编写它,它将等效于[^\p{LN}_]

【讨论】:

  • 好吧,我很高兴看到其他人也这么认为,但是我们可以备份这个声明吗?我不知道在哪里可以挖掘 PHP 源代码或在哪里可以找到验证过这一点的人...
  • @Xeoncross:这就是它的定义。您是否有任何特别的理由怀疑它的行为方式不符合其定义的行为方式?如果您对此感到担心,请改用\p{xx} 语法。
  • 好的,谢谢,我怀疑它的唯一原因是我对 PHP 函数所期望的可怜的、缺乏思想的 UTF-8 支持。如果\W 仅设计用于 ASCII 序列,我不想假设它会像这样工作。感谢您的快速输入。
  • @Xeoncross:如果你真的想测试一下,请使用\w 语法编写一个正则表达式,并使用\p{xx} 语法编写一个等效的正则表达式,看看它们匹配的内容是否有任何差异.我不会期待任何,但你永远不会知道。
  • 我想获得 \w 等价物,但 [\p{LN}_] 在我的 PHP 代码中不起作用。所以我尝试了 [\p{L}\p{N}_] 并且它有效。
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 2011-01-04
  • 2012-06-10
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2011-06-15
  • 2012-05-14
相关资源
最近更新 更多