2024年PHP开发者大会日本站

分隔符

使用PCRE函数时,需要用分隔符括起模式。分隔符可以是任何非字母数字、非反斜杠、非空格字符。有效的分隔符之前的空格将被忽略。

常用的分隔符是正斜杠(/)、井号(#)和波浪号(~)。以下是几个有效的带分隔符的模式示例。

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%

也可以使用括号样式的分隔符,其中开括号和闭括号分别是起始和结束分隔符。(){}[]<>都是有效的括号样式分隔符对。

(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
当括号样式的分隔符用作模式中的元字符时,不需要转义,但与其他分隔符一样,当用作字面字符时必须转义。

如果需要在模式内部匹配分隔符,则必须使用反斜杠对其进行转义。如果分隔符在模式内部经常出现,为了提高可读性,最好选择另一个分隔符。

/http:\/\//
#http://#
preg_quote() 函数可以用来转义要注入模式的字符串,其可选的第二个参数可以用来指定要转义的分隔符。

您可以在结束分隔符后添加模式修饰符。以下是一个不区分大小写的匹配示例。

#[a-z]#i

添加注释

用户贡献的注释 3条注释

Pedro Gimeno
9年前
请注意,括号样式的起始和结束分隔符并非100%没有问题,因为当它们在表达式中不是成对出现时,需要对其进行转义。当它们出现在字符类[...]内时,这种不匹配可能会发生,因为大多数元字符会失去其特殊含义。请考虑以下示例

<?php
preg_match
('{[{]}', ''); // 警告:preg_match(): 没有结束匹配的分隔符'}'
preg_match('{[}]}', ''); // 警告:preg_match(): 未知的修饰符']'
preg_match('{[}{]}', ''); // 警告:preg_match(): 未知的修饰符']'
?>

转义它们可以解决问题

<?php
preg_match
('{[\{]}', ''); // 正确
preg_match('{[}]}', ''); // 正确
preg_match('{[\}\{]}', ''); // 正确
?>
Munin
9年前
preg_match('{[}]}', ''); // 警告:preg_match(): 未知的修饰符']'

preg_match('{[\}]}', ''); // 正确
Revo
5年前
请注意,当您必须调用高级集群(如原子组或后视断言)时,不应使用尖括号`<>`作为分隔符,因为它们的包含尖括号不成对出现,并且转义也无济于事。
To Top