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

正则表达式中应转义哪些文字字符?

黄成荫
2023-03-14
问题内容

我刚刚编写了一个与php函数一起使用的正则表达式preg_match,其中包含以下部分:

[\w-.]

匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨
“ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为

[\w\-.]

由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具有含义的字符-
为什么我不需要转义该点。我使用的实用程序是不是很愚蠢,是否与其他regex方言一起使用,还是我的regex真的不正确,我是否很幸运preg_match让我摆脱了它?


问题答案:

在许多正则表达式实现中,以下规则适用:

字符类中的元字符是:

  • ^ (否定)
  • - (范围)
  • ] (课程结束)
  • \ (转义字符)

所以这些都应该逃脱。但是,有些极端情况:

  • -如果放在课程的开头或结尾([abc-][-abc]),则无需转义。在许多正则表达式实现中,当直接放在范围([a-c-abc])或简写字符类([\w-abc])之后时,也无需转义。这就是你观察到的
  • ^ 不在 类开头时不需要转义:[^a]表示除以外的任何字符a,并[a^]匹配a^,等于:[\^a]
  • ]如果它是类中的唯一字符,则无需转义:[]]匹配char]


 类似资料:
  • 问题内容: 我厌倦了总是试图猜测,()[]{}|在使用许多正则表达式实现时是否应该转义’ ‘等特殊字符。 它与Python,sed,grep,awk,Perl,重命名,Apache,find等不同。是否有任何规则集可以告诉我何时以及何时不应该转义特殊字符?它是否取决于正则表达式类型,例如PCRE,POSIX或扩展正则表达式? 问题答案: 实际上,您必须转义哪些字符以及您必须避免转义哪些字符确实取决

  • 问题内容: 当匹配某些字符(例如换行符)时,可以使用正则表达式“ \\ n”或仅使用“ \ n”。例如,以下将字符串拆分为行数组: 但是以下内容同样适用: 我的问题: 上面两个是 完全 一样地工作,还是有细微的差别?如果是后者,能否举个例子,说明您得到不同的结果? 还是仅在[可能/理论]表现上有所不同? 问题答案: 在当前情况下没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后有效的

  • 问题内容: 我想使用来自用户的输入作为正则表达式模式来搜索某些文本。它可以工作,但是我该如何处理用户在正则表达式中放置有意义的字符的情况?例如,用户要搜索:正则表达式引擎会将(s)分组。我希望它像对待字符串一样对待它。我可以replace在用户输入上运行并将和 替换,但是问题是我将需要对每个可能的正则表达式符号进行替换。你知道更好的方法吗? 问题答案: 使用此功能: 4.2.3 re模块内容 转义

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 我肯定这已经张贴之前,但我有麻烦找到一个答案。

  • 问题内容: 我正在尝试在另一个字符串中替换字符串“ []”的第一个匹配项: aString.replaceFirst(“ []”,“等等”); 我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未封闭字符类 [和]显然是元字符,但是当我尝试使用\来转义它们时,eclipse抱怨说这不是有效的转义序列。 我看过但找不到,我想念什么? 谢谢 问