文字
分享

分隔符

当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。

经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。下面的例子都是使用合法分隔符的模式。

1

2

3

4

/foo bar/

#^[^0-9]$#

+php+

%[a-zA-Z0-9_-]%

如果分隔符需要在模式内进行匹配,它必须使用反斜线进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。

1

2

/http:\/\//

#http://#

需要将一个字符串放入模式中使用时,可以用 preg_quote() 函数对其进行 转义,它的第二个参数(可选)可以用于指定需要被转义的分隔符。

除了上面提到的分隔符,也可以使用括号样式的分隔符,左括号和右括号分别作为开始和结束 分隔符。

1

{this is a pattern}

可以在结束分隔符后面增加模式修饰符。 下面的例子是一个大小写不敏感的匹配:

1

#[a-z]#i

用户评论:

[#1] Munin [2015-08-26 13:07:30]

preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'

preg_match('{[\}]}', ''); // OK

[#2] Pedro Gimeno [2015-02-26 00:46:20]

Note that bracket style opening and closing delimiters aren't a 100% problem-free solution, as they need to be escaped when they aren't in matching pairs within the expression. That mismatch can happen when they appear inside character classes [...], as most meta-characters lose their special meaning. Consider these examples:

<?php
  preg_match
('{[{]}'''); // Warning: preg_match(): No ending matching delimiter '}'
  
preg_match('{[}]}'''); // Warning: preg_match(): Unknown modifier ']'
  
preg_match('{[}{]}'''); // Warning: preg_match(): Unknown modifier ']'
?>


Escaping them solves it:

<?php
  preg_match
('{[\{]}'''); // OK
  
preg_match('{[}]}'''); // OK
  
preg_match('{[\}\{]}'''); // OK
?>

上一篇:简介下一篇:元字符