这让我烦恼:
为什么preg_match('/pattern/', $haystack)
代替preg_match('pattern', $haystack)
?我所见过的所有内容都表明它们是必要的,并且提到你可以使用备用分隔符。
但是,它是一个函数,它定义了字符串之外的自己的接口。 它有一个标志参数。添加字符串内的语法似乎反复无常。
这是作者对pcre继承的东西吗? PHP的又一个不正确的事实?或者有理由吗?
答案 0 :(得分:5)
分隔符是为了与Perl兼容。 Perl正则表达式使用分隔符,并依赖结束分隔符来表示开始of modifier flags,例如i
表示不区分大小写。
// Match alpha-numeric, case insensitive, multiline
preg_match('/^[a-z0-9]+$/im', $input);
preg_match()
的可选flags参数不会实现跟随第二个分隔符的正则表达式标志,如i
。它们提供不同的功能,实际上PREG_OFFSET_CAPTURE
是唯一可用的标志。这并不是说正则表达式标志不能作为另一个函数参数实现。他们当然可以拥有,但Perl兼容性是这里的目标。
PHP并不是直接从Perl借用来实现正则表达式的唯一语言。 JavaScript在某种程度上做了,Ruby甚至为正则表达式匹配实现了Perl的=~
运算符。
答案 1 :(得分:0)
我认为它是为了互操作性而完成的,因此您可以复制和粘贴模式从/到另一种语言,而不必将模式选项转换为PHP标志./ / p>
答案 2 :(得分:0)
分隔符用于Perl兼容性(因此,Perl兼容的正则表达式,或PCRE)。该模式还包括您选择使用的任何修饰符,并且必须在结束分隔符后放置。
答案 3 :(得分:-1)
这是继承的东西吗?
事实上,每种编程语言都需要一个标准,因此PCRE是一个更好的标准。 click