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

PHP正则表达式模式中需要额外的反斜杠

高寒
2023-03-14
问题内容

测试另一个用户的问题的答案时,我发现了一些我不理解的东西。问题是\t``\n``\r用一个空格替换字符串中的所有文字字符。

现在,我尝试的第一个模式是:

/(?:\\[trn])+/

令人惊讶的是,这没有用。我在Perl中尝试了相同的模式,但效果很好。经过一番尝试和错误后,我发现PHP希望该模式匹配3或4个反斜杠,如下所示:

/(?:\\\\[trn])+/

要么

/(?:\\\[trn])+/

这些模式-令我惊讶的-都有效。为什么需要这些额外的反斜杠?


问题答案:

您需要4个反斜杠来表示正则表达式中的1个,因为:

  • 2个反斜杠用于在字符串("\\\\" -> \\)中转义
  • 1个反斜杠用于在正则表达式引擎(\\ -> \)中转义

从PHP文档中,

转义任何其他字符将导致反斜杠也被打印出来1

因此,对于\\\[

  • 1个反斜杠用于对进行转义\,因为\[无效("\\\[" -> \\[
  • 1个反斜杠用于在正则表达式引擎(\\[ -> \[)中转义

是的,它是可行的,但不是一个好习惯。



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

  • 我需要一个正则表达式来检查和删除< code > membership user < code > userName 中的特殊字符。 当我第一次将网站设置为测试版时,我没有考虑到特殊字符不是获取用户名的好方法,“在我的应用程序中”。 下面我有一段模板代码,写得不太正确,但是给了愿意帮助的人一个好的开始。 --我需要从用户名中删除所有特殊字符和空格,同时更新用户名。 当我说我所说的特殊字符~、`、!

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

  • 问题内容: 我对正则表达式中的反斜杠感到困惑。在正则表达式中,a具有特殊含义,例如表示十进制数字。如果在反斜杠前面添加反斜杠,则该特殊含义会丢失。在正则表达式中,可以阅读: 也许最重要的元字符是反斜杠。与Python字符串文字一样,反斜杠后可以跟各种字符,以表示各种特殊序列。它也用于转义所有元字符,因此您仍可以按模式匹配它们。例如,如果您需要匹配或,则可以在它们前面加上反斜杠以删除其特殊含义:或。

  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)

  • 我是正则表达式的初学者,并尝试搜索特定的数字模式。以下数据以 XML 格式嵌入。 要求是提取数据(最里面的列表)。在这个例子中,数据从24779开始到24760。注意:每次数据可能不是从“24”开始。因此,我计划通过以下逻辑提取:如果标签名(在本例中:DUT_1_PC)具有非零的有效数据,并且有效数据的计数大于100,用逗号分隔,则提取该列表及其标签名(DUT_1_PC)。 我无法提取所需的数据。