为什么在PHP的preg_match函数中使用反斜杠?

时间:2015-02-21 11:47:02

标签: php regex preg-match

我在PHP中练习preg_match()函数。该教程说需要在角色之前添加前斜杠。

我也注意到没有斜线,它的作用很奇怪。它发出警告:

preg_match(): Delimiter must not be alphanumeric or backslash.

问:前面的斜杠有什么区别?

以下是代码:

$string = 'Okay, I\'m fine with it! ';
$math =  'Okay'; // I need to add fore slashes for it to work
echo preg_match($math, $string); // It supposedly echoes out 1 or 0
                                 // depending if the former argument
                                 // is in the latter argument

2 个答案:

答案 0 :(得分:2)

没有特别的原因,它是一种语法选择。这种语法可以方便地为模式添加全局修饰符:

delimiter - pattern - delimiter - [global modifiers]

如错误消息和php手册中所述,您可以选择特殊字符之间的分隔符,最常用的是斜杠,但它并不总是一个相关的选择,特别是当模式包含很多需要转义的字面斜线。

答案 1 :(得分:1)

这是因为您还可以将开关应用于正则表达式(例如,m表示多行,u表示Unicode),这些需要在分隔符之外定义,因此语法是

opening delimiter   expression   closing delimiter   [optional switches]

e.g。

/^[a-z]*$/mi

表示多行(m)和不区分大小写(i)的切换,使用/的分隔符

分隔符不能是可以被正则表达式解析器误解的字符,它必须非常清楚它是分隔符,因此它不能是alpha(例如i\用于"转义"正则表达式中的字符

请注意,您还可以使用大括号作为分隔符,所以

[^[a-z]*$]mi

有效