为什么 PHP 的`preg`要求正则有分隔符?


难道是因为跟Perl学的?可是Perl是内嵌正则表达式的语言,用分隔符标明正则很自然。PHP既然是用 preg 系列函数处理,为什么还要用分隔符?

Python下也是用函数处理( re 模块提供),不需要分隔符。


 pattern = re.compile("foo")

Haskell 下的 Text.Regex.Posix 一样不需要分隔符。


 "my left foot" =~ "foo" :: Bool

有意思的是,PHP 5.3 开始废弃的 ereg 系列函数是不加分隔符的:


 eregi("(ozilla.[23]|MSIE.3)", $_SERVER["HTTP_USER_AGENT"]);

那么 preg 系列函数设计成 pattern 需要加分隔符,有何用意?

正则表达式 python php syntax haskell

xuwei 11 years, 8 months ago

加了分隔符的话可以加一些模式修饰符 m , u , i , s 之类的吧,不加分隔符怎么加?而且 preg 系列的话是沿袭 PCRE 系列的,所以遵从了 PCRE 的一些基本规则吧, POSIX 的就是不要分隔符的嘛。另外 preg 系列和 perl 还有些许不同的,所以应该不是跟 perl 学的吧。

参考资料:
PCRE与perl的不同之处
PCRE与POSIX正则的不同之处
正则表达式中可用的模式修饰符

河蟹爆发者 answered 11 years, 8 months ago

Your Answer