举个例子,/[ ]{0,3}/
的含义与/ {0,3}/
不同吗?
答案 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
,除非文字空间是唯一允许的。