9

举个例子, 和/[ ]{0,3}/有不同的含义/ {0,3}/吗?

4

2 回答 2

13

如果启用了允许在正则表达式中的标记之间“自由空间”的修饰符标志(为了可读性并允许在正则表达式中注释) ,它可能具有不同的含义。x但如果不启用此设置,则两者之间没有功能差异。

有关此选项的详细说明,请参阅此Regex 教程,其中特别指出:

...自由间距模式在字符类中无效。字符类中的空格和换行符将包含在字符类中。

此外,对于 PHP 特定权限,请参阅PCRE 模式修饰符的 PHP 手册,其中指出:

x (PCRE_EXTENDED) 如果设置了此修饰符,则模式中的空白数据字符将被完全忽略,除非转义或在字符类中...

另请参阅有关指定修饰符的其他正则表达式教程页面,该页面解释了如何在不同风格的正则表达式中实现修饰符。

修饰符标志可以包含在正则表达式本身中,因为(?x)这意味着从正则表达式中的那一点开始到正则表达式的末尾(或直到结束(?-x))都启用了空闲空间。特别是对于 PHP,修饰符标志可以通过尾随正则表达式应用于整个表达式,例如(使用您的示例之一)/ {0,3}/x

无论该设置如何,方括号格式 ( [ ]) 都明确表示文字空间,并且 IMO 是自我记录的;它非常明确地显示了 devoloper 使用文字空间的意图,可能优先于 " \s" 字符类(它还包括制表符和换行符)。

此外,同样只是 IMO,这是一种将空格作为文字“转义”的更可取的方式,而不是使用“ \ ”,后者很容易被未来的代码维护者误解或忽视。

于 2013-04-13T13:35:58.550 回答
4

它们产生相同的结果,但方括号中的结果更具可读性和更深思熟虑。

就个人而言,我宁愿使用\s,除非文字空间是唯一允许的。

于 2013-04-13T13:35:06.927 回答