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

Why are backslashes used in preg_match function of PHP?

我一直在练习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

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

opening delimiter   expression   closing delimiter   [optional switches]

例如

/^[a-z]*$/mi

对于多行 (m) 和不区分大小写 (i) 的开关,使用分隔符 /

定界符不能是正则表达式解析器可能会误解的字符,必须非常清楚它是定界符,所以不能是字母(例如 i,或 \ 用于 "escape" 正则表达式中的字符

请注意,您也可以使用大括号作为分隔符,因此

[^[a-z]*$]mi

有效

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

delimiter - pattern - delimiter - [global modifiers]

如错误消息和 php 手册中所述,您可以选择特殊字符之间的分隔符,最常用的是斜杠,但并不总是合适的选择,尤其是当模式包含大量需要转义的文字斜线。