方括号中的空格是否具有与空间不同的含义?

时间:2013-04-13 13:31:24

标签: php regex

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

2 个答案:

答案 0 :(得分:13)

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

有关此选项的详细说明,请参阅此Regex Tutorial,其中声明:

  

...自由间距模式在字符类中没有任何影响。空间   和字符类中的换行符将包含在   人物类。

此外,对于PHP特定权限,请参阅PCRE Pattern Modifiers的PHP手册,其中指出:

  

x(PCRE_EXTENDED)如果设置了此修饰符,则为空白数据字符   在模式中被完全忽略,除非在转义或内部时   角色等级......

另请参阅this other Regex Tutorial page on specifying modifiers,其中介绍了如何在不同版本的正则表达式中实现修饰符。

修饰符标志可以作为(?x)包含在正则表达式中,这意味着从正则表达式中的那一点开始向正则表达式的结尾(或直至结束(?-x))启用自由空间。特别是对于PHP,修饰符标志可以通过尾随正则表达式应用于整个表达式,例如(使用你的一个例子)/ {0,3}/x

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

此外,再次只是IMO,这是一种“逃避”空间作为文字的首选方式,而不是使用“\ ”,这很容易被未来的代码维护者误解或忽视。

答案 1 :(得分:4)

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

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