> 백엔드 개발 > PHP 튜토리얼 > python - 为什么 PHP 的`preg`要求正则有分隔符?

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

WBOY
풀어 주다: 2016-06-06 20:48:08
원래의
990명이 탐색했습니다.

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

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

<code class="lang-python">pattern = re.compile("foo")
</code>
로그인 후 복사
로그인 후 복사

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

<code class="lang-haskell">"my left foot" =~ "foo" :: Bool
</code>
로그인 후 복사
로그인 후 복사

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

<code class="lang-php">eregi("(ozilla.[23]|MSIE.3)", $_SERVER["HTTP_USER_AGENT"]);
</code>
로그인 후 복사
로그인 후 복사

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

回复内容:

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

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

<code class="lang-python">pattern = re.compile("foo")
</code>
로그인 후 복사
로그인 후 복사

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

<code class="lang-haskell">"my left foot" =~ "foo" :: Bool
</code>
로그인 후 복사
로그인 후 복사

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

<code class="lang-php">eregi("(ozilla.[23]|MSIE.3)", $_SERVER["HTTP_USER_AGENT"]);
</code>
로그인 후 복사
로그인 후 복사

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

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

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿