为什么PHP正则表达式需要使用定界符?如果模式修饰符可以作为函数的参数传递,似乎这样会更加清晰。
分隔符的原因是为了在模式后面放置标志。可以说标志可以作为单独的参数传递(Java可以这样做),但最初Perl就是这样做的(以及之前的sed/awk/vi),所以现在也是这样做的。
不要使用斜杠:它们太常见了。个人几乎总是使用!字符。我很少会寻找它。
没有技术上的原因要求它必须这样。
正如评论中所指出的那样,底层库并不要求标志作为 regexp 的一部分进行传递 - 实际上,扩展程序必须将其剥离并作为单独的参数进行传递。
看起来,最初的实现者试图使它看起来像 grep/sed/awk/perl 等工具,以便对从这些工具转换过来的程序员更加熟悉。