为什么PHP preg_ *函数需要regexp分隔符?

时间:2012-03-03 23:47:41

标签: php regex

这让我烦恼:

为什么preg_match('/pattern/', $haystack)代替preg_match('pattern', $haystack)?我所见过的所有内容都表明它们是必要的,并且提到你可以使用备用分隔符。

但是,它是一个函数,它定义了字符串之外的自己的接口。 它有一个标志参数。添加字符串内的语法似乎反复无常。

这是作者对pcre继承的东西吗? PHP的又一个不正确的事实?或者有理由吗?

4 个答案:

答案 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