PHP PREG正则表达式:在使用UTF-8修饰符时,"\W"是什么意思?

4

你是不是指的是\w而不是\W - Alix Axel
好的,我实际上是指两者 - 但我已经将我的问题修复为\w - Xeoncross
1个回答

7

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

因此,在Unicode字符类方面,\W等价于所有不在L或N字符类中且不是下划线字符的字符。

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


1
很高兴看到其他人也这样想,但我们能以任何方式支持这个说法吗?我不确定在PHP源代码中该从哪里挖掘或者在哪里找到已经验证过的人... - Xeoncross
@Xeoncross:它就是被定义为什么样子就是什么样子。你有没有特别的理由怀疑它不按照定义的方式运作?如果你真的很担心,就使用\p{xx}语法。 - Welbog
好的,谢谢。我之前怀疑的唯一原因是因为我已经习惯了 PHP 函数对 UTF-8 的支持不够完善和缺乏思考。如果 \W 只是针对 ASCII 序列设计的话,我就不想假设它能像这样工作。感谢您的快速回复。 - Xeoncross
@Xeoncross:如果你真的想测试一下,可以使用\w语法编写一个正则表达式,再使用\p{xx}语法编写一个等效的正则表达式,看看它们匹配的内容是否有差异。我不会期望有什么差别,但你永远不知道。 - Welbog
我想得到与\w等效的结果,但是在我的PHP代码中[\p{LN}]不能工作。所以我尝试了[\p{L}\p{N}],它可以正常工作。 - Evgeni Nabokov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接