一尘不染

在正则表达式中转义反斜杠[\\]的正确方法?

php

出于好奇,我试图找出哪一种是在PHP正则表达式模式中使用反斜杠的正确方法:

测试01:(3个反斜线)

$pattern = "/^[\\\]{1,}$/";
$string = '\\';

// ----- RETURNS A MATCH -----

测试02:(4个反斜线)

$pattern = "/^[\\\\]{1,}$/";
$string = '\\';

// ----- ALSO RETURNS A MATCH -----

根据下面的文章,4应该是正确的方法,但令我困惑的是两个测试都返回了一个匹配项。如果两者都正确,那么4是首选方式吗?


阅读 1667

收藏
2020-05-26

共1个答案

一尘不染

事实是,您正在使用字符类,[]因此无论嵌入多少文字反斜杠都无关紧要,它将被视为单个反斜杠。

例如以下两个正则表达式:

/[a]/
/[aa]/

就正则表达式引擎而言,其所有意图和目的都是相同的。字符类采用一个字符列表,然后将它们“折叠”下来以匹配单个字符,并遵循“对于正在考虑的当前字符,是否是[]?中列出的任何字符”这一行。如果您在类中列出了两个反斜杠,那么它将是“字符是一个反斜杠还是一个反斜杠?”。

2020-05-26