当前位置: 首页 > 面试题库 >

如何在单引号和双引号PHP正则表达式模式中正确地转义反斜杠以匹配文字反斜杠

太叔飞翰
2023-03-14
问题内容

为了匹配文字上的反斜杠,许多人和PHP手册都说:总是这样对它进行三倍转义\\\\

注意事项

单引号和双引号的PHP字符串具有反斜杠的特殊含义。因此,如果\必须与正则表达式匹配\\,则必须在PHP代码中使用"\\\\"'\\\\'

这是一个示例字符串: \test

$test = "\\test"; // outputs \test;

// WON'T WORK: pattern in double-quotes double-escaped backslash
#echo preg_replace("~\\\t~", '', $test); #output -> \test

// WORKS: pattern in double-quotes with triple-escaped backslash
#echo preg_replace("~\\\\t~", '', $test); #output -> est

// WORKS: pattern in single-quotes with double-escaped backslash
#echo preg_replace('~\\\t~', '', $test); #output -> est

// WORKS: pattern in double-quotes with double-escaped backslash inside a character class
#echo preg_replace("~[\\\]t~", '', $test); #output -> est

// WORKS: pattern in single-quotes with double-escaped backslash inside a character class
#echo preg_replace('~[\\\]t~', '', $test); #output -> est

结论

  • 如果模式是单引号,则必须将双反斜杠转义\\\以匹配文字\
  • 如果模式被双引号引起,则取决于反冲是否在字符类内部,在该字符级中必须至少将其两次转义,而必须将\\\ 其三倍转义\\\\

谁能给我带来不同呢?单引号中的双转义反斜杠'~\\\~'会匹配双引号中的三转义反斜杠,例如匹配"~\\\\~"或失败。

何时/为什么/在什么情况下使用\单引号引起来的双转义是错误的,例如'~\\\~'用于匹配文字反斜杠?

如果这个问题没有答案,我将继续\\\在单引号的PHP regex模式中始终使用双转义的反斜杠来匹配文字,\因为它可能没有问题。


问题答案:

\PHP的解析器和正则表达式引擎(PCRE)都将反斜杠字符()视为转义字符。如果编写单个反斜杠字符,则PHP解析器会将其视为转义字符。如果编写两个反斜杠,则PHP的解析器会将其解释为文字反斜杠。但是,当在正则表达式中使用时,正则表达式引擎会将其用作转义字符。为了避免这种情况,您需要根据引用模式的方式编写四个反斜杠字符。

要了解两种类型的引用模式之间的区别,请考虑以下两个var_dump()语句:

var_dump('~\\\~');
var_dump("~\\\\~");

输出:

string(4) "~\\~"
string(4) "~\\~"

\~在单引号字符串中使用转义序列时,在PHP中没有特殊含义。三个反斜杠也可以,因为PHP解析器不知道转义顺序\~。因此\\将成为\\~将保持不变\~

您应该使用哪一个:

为了清楚起见,我总是~\\\\~在想要匹配文字反斜杠时使用。另一个也可以,但是我认为~\\\\~更加清楚。



 类似资料:
  • 如何写一个正则表达式来匹配这个< code>\"(一个反斜杠然后一个引号)?假设我有这样一个字符串: 我需要将所有替换为,因此结果如下所示: 这个不起作用:因为它只匹配引号。不知道如何使用反斜杠。我本可以先删除反斜杠,但我的字符串中还有其他反斜杠。

  • 问题内容: 如何编写一个正则表达式来匹配它(反斜杠然后是引号)?假设我有一个像这样的字符串: 我需要将所有替换为,因此结果如下所示: 这是行不通的:因为它只匹配引号。不确定如何使用反斜杠。我本可以先删除反斜杠,但字符串中还有其他反斜杠。 问题答案: 如果你 不需要任何像预定义的字符类\ d,量词等正则表达式的机制 ,而不是其预期正则表达式使用其预计文字 两种方法都将替换 所有 出现的目标,但是将按

  • 我正在尝试用单个反斜杠替换所有双反斜杠。我想将替换为。我以为python将视为一个反斜杠,将视为带有两个反斜杠的字符串。但是当我尝试时 因此,我尝试用原始字符串切换替换字符串: 这不是我需要的。所以我只尝试了原始字符串中的一个反斜杠:

  • 问题内容: 如何在Python中转义反斜杠和单引号或双引号? 例如: 问题答案: 你是怎么做到的 如果您从文件中读取了“长字符串”(如您在注释中所述),那么您的问题将引起误解。由于您显然不完全了解转义的工作原理,因此您写下的问题可能与您真正遇到的问题不同。 如果这些是文件的内容(如图所示为51个字节+可能是一两个行尾字符): 那么这就是在python中的样子: 您在问题中写的内容将产生: 你看得到

  • 问题内容: 我想构建一个JS函数,将一个参数列表隐藏到有效路径中(因为我不确定路径的一部分是否带有斜杠) 这是功能: 使用的RegEx匹配了http://regexpal.com上的所有开始和结束斜杠和反斜杠,但是该功能无法正常工作(RegEx不匹配)。此外,Chrome指出 语法错误:无效的正则表达式:/()$ | ^()/:未终止的组 当我只使用RegEx 但是,使用RegEx 提前致谢! 狮

  • 问题内容: 出于好奇,我试图找出哪一种是在PHP正则表达式模式中使用反斜杠的正确方法: 测试01:(3个反斜线) 测试02:(4个反斜线) 根据下面的文章,4应该是正确的方法,但令我困惑的是两个测试都返回了一个匹配项。如果两者都正确,那么4是首选方式吗? 问题答案: 事实是,您正在使用字符类,因此无论嵌入多少文字反斜杠都无关紧要,它将被视为单个反斜杠。 例如以下两个正则表达式: 就正则表达式引擎而