PHP正则表达式分隔符,有什么意义?

Eva*_*ark 15 php regex

为什么PHP正则表达式具有周围的分隔符?似乎更清楚的是,是否将任何模式修饰符作为参数传递给正在使用的任何函数.

cle*_*tus 17

分隔符的原因是在模式后面放置标志.可以说Flag可以作为一个单独的参数传递(Java可以这样做),但这就是Perl最初做的方式(以及之前的sed/awk/vi),这就是现在它的完成方式.

不要使用正斜杠:它们太常见了.我个人几乎总是使用!字符.我几乎没有找到那个.

  • "这就是较旧的工具如何做到这一点"这一论点的问题在于,与所有列出的其他工具不同,PHP没有正则表达式的文字语法.相反,整个正则表达式嵌入在一个字符串中,但该字符串被构造为"看起来像"旧工具中使用的文字. (2认同)

Cal*_*Cal 7

没有技术理由说明它必须是这样的.

正如注释中所指出的,底层库不要求将标志作为正则表达式的一部分传递 - 事实上,扩展必须将它们剥离并将它们作为单独的参数传递.

看起来好像最初的实现者试图使它看起来像grep/sed/awk/perl/etc,这样来自这些工具的程序员就会更熟悉它.

  • PCRE根本不允许使用周围的分隔符.PHP preg函数在将它们传递给PCRE库之前将它们删除. (4认同)
  • 哇,那么它是什么纯粹的试图成为perl?多年来我一直宽恕语法,但现在我可以自由地讨厌它.谢谢! (3认同)

Jan*_*rts 6

我不知道preg函数开发人员的动机是什么.我能想到的唯一原因是他们尝试用Perl方式做事有点太难了.

虽然分隔符允许将标志与正则表达式一起指定为一个参数,但将标志指定为单独的参数要清晰得多.这就是每个其他正则表达式库(对于不支持文本正则表达式作为语言特性的语言)我知道的,包括PHP的preg函数所基于的PCRE库.preg代码确实必须通过你的正则表达式从字符串中删除正则表达式分隔符,然后才能传递给PCRE.