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

时间:2009-01-27 05:16:21

标签: php regex

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:7)

没有技术理由说明为什么必须这样。

如注释中所述,底层库不要求将标志作为regexp的一部分传递 - 实际上,扩展必须将它们剥离并将它们作为单独的参数传递。

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

答案 2 :(得分:6)

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

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