分隔符

使用 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 条注释

36
Pedro Gimeno
9 年前
请注意,括号样式的开括号和闭括号分隔符并非 100% 无问题的解决方案,因为它们需要在表达式中不匹配的情况下进行转义。这种不匹配可能会发生在它们出现在字符类 [... ] 中时,因为大多数元字符会失去其特殊含义。请考虑以下示例

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

转义它们可以解决问题

<?php
preg_match
('{[\{]}', ''); // OK
preg_match('{[}]}', ''); // OK
preg_match('{[\}\{]}', ''); // OK
?>
11
Munin
8 年前
preg_match('{[}]}', ''); // 警告:preg_match(): 未知修饰符 ']'

preg_match('{[\}]}', ''); // OK
5
Revo
5 年前
请注意,当您需要调用像原子组或后顾之类的高级集群时,不应将尖括号 `<>` 用作分隔符,因为它们包含的尖括号不匹配,并且转义也无济于事。
To Top