出于好奇,我试图找出哪一种是在PHP正则表达式模式中使用反斜杠的正确方法:
测试01:(3个反斜线)
$pattern = "/^[\\\]{1,}$/"; $string = '\\'; // ----- RETURNS A MATCH -----
测试02:(4个反斜线)
$pattern = "/^[\\\\]{1,}$/"; $string = '\\'; // ----- ALSO RETURNS A MATCH -----
根据下面的文章,4应该是正确的方法,但令我困惑的是两个测试都返回了一个匹配项。如果两者都正确,那么4是首选方式吗?
事实是,您正在使用字符类,[]因此无论嵌入多少文字反斜杠都无关紧要,它将被视为单个反斜杠。
[]
例如以下两个正则表达式:
/[a]/ /[aa]/
就正则表达式引擎而言,其所有意图和目的都是相同的。字符类采用一个字符列表,然后将它们“折叠”下来以匹配单个字符,并遵循“对于正在考虑的当前字符,是否是[]?中列出的任何字符”这一行。如果您在类中列出了两个反斜杠,那么它将是“字符是一个反斜杠还是一个反斜杠?”。