cle*_*tus 17
分隔符的原因是在模式后面放置标志.可以说Flag可以作为一个单独的参数传递(Java可以这样做),但这就是Perl最初做的方式(以及之前的sed/awk/vi),这就是现在它的完成方式.
不要使用正斜杠:它们太常见了.我个人几乎总是使用!字符.我几乎没有找到那个.
没有技术理由说明它必须是这样的.
正如注释中所指出的,底层库不要求将标志作为正则表达式的一部分传递 - 事实上,扩展必须将它们剥离并将它们作为单独的参数传递.
看起来好像最初的实现者试图使它看起来像grep/sed/awk/perl/etc,这样来自这些工具的程序员就会更熟悉它.
我不知道preg函数开发人员的动机是什么.我能想到的唯一原因是他们尝试用Perl方式做事有点太难了.
虽然分隔符允许将标志与正则表达式一起指定为一个参数,但将标志指定为单独的参数要清晰得多.这就是每个其他正则表达式库(对于不支持文本正则表达式作为语言特性的语言)我知道的,包括PHP的preg函数所基于的PCRE库.preg代码确实必须通过你的正则表达式从字符串中删除正则表达式分隔符,然后才能传递给PCRE.