PHP正则表达式分隔符,/ vs. | 与{},有什么区别?

pow*_*boy 6 php regex

在PCRE的PHP手册http://us.php.net/manual/en/pcre.examples.php中,它给出了4个有效模式的例子:

  • /<\/\w+>/
  • |(\d{3})-\d+|Sm
  • /^(?i)php[34]/
  • {^\s+(\s+)?$}

似乎/,|或者一对花括号可以用作分隔符,它们之间有什么区别吗?

ken*_*ytm 5

没什么区别,只不过关闭分隔符不能不转义而出现。

当经常使用标准定界符时,例如,代替

preg_match("/^http:\\/\\/.+/", $str);
Run Code Online (Sandbox Code Playgroud)

你可以写

preg_match("[^http://.+]", $str);
Run Code Online (Sandbox Code Playgroud)

避免需要逃脱/

  • 我认为[^ http://.+]不起作用,因为它会错误地匹配不是h,t,p等之一的任何字符。#^ http://.+#或〜^ http: //.+~会没事的。 (2认同)
  • @Kenny:这是一个可怕的例子! (2认同)
  • @powerboy手册**确实提到使用[[…]`作为定界符:*除了上述定界符外,还可以使用括号类型的定界符,其中左,右括号是开始和结束定界符,分别。* [源代码](http://php.net/regexp.reference.delimiters) (2认同)

nic*_*ico 5

实际上,您可以使用任何非字母数字分隔符(不包括空格和反斜杠)

"%^[a-z]%"
Run Code Online (Sandbox Code Playgroud)

以及

"*^[a-z]*"
Run Code Online (Sandbox Code Playgroud)

以及

"!^[a-z]!"
Run Code Online (Sandbox Code Playgroud)