举个例子, 和/[ ]{0,3}/
有不同的含义/ {0,3}/
吗?
2 回答
如果启用了允许在正则表达式中的标记之间“自由空间”的修饰符标志(为了可读性并允许在正则表达式中注释) ,它可能具有不同的含义。x
但如果不启用此设置,则两者之间没有功能差异。
有关此选项的详细说明,请参阅此Regex 教程,其中特别指出:
...自由间距模式在字符类中无效。字符类中的空格和换行符将包含在字符类中。
此外,对于 PHP 特定权限,请参阅PCRE 模式修饰符的 PHP 手册,其中指出:
x (PCRE_EXTENDED) 如果设置了此修饰符,则模式中的空白数据字符将被完全忽略,除非转义或在字符类中...
另请参阅有关指定修饰符的其他正则表达式教程页面,该页面解释了如何在不同风格的正则表达式中实现修饰符。
修饰符标志可以包含在正则表达式本身中,因为(?x)
这意味着从正则表达式中的那一点开始到正则表达式的末尾(或直到结束(?-x)
)都启用了空闲空间。特别是对于 PHP,修饰符标志可以通过尾随正则表达式应用于整个表达式,例如(使用您的示例之一)/ {0,3}/x
无论该设置如何,方括号格式 ( [ ]
) 都明确表示文字空间,并且 IMO 是自我记录的;它非常明确地显示了 devoloper 使用文字空间的意图,可能优先于 " \s
" 字符类(它还包括制表符和换行符)。
此外,同样只是 IMO,这是一种将空格作为文字“转义”的更可取的方式,而不是使用“ \
”,后者很容易被未来的代码维护者误解或忽视。
它们产生相同的结果,但方括号中的结果更具可读性和更深思熟虑。
就个人而言,我宁愿使用\s
,除非文字空间是唯一允许的。