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

在正则表达式中必须转义哪些特殊字符?

漆雕奇
2023-03-14
问题内容

我厌倦了总是试图猜测,()[]{}|在使用许多正则表达式实现时是否应该转义’ ‘等特殊字符。

它与Python,sed,grep,awk,Perl,重命名,Apache,find等不同。是否有任何规则集可以告诉我何时以及何时不应该转义特殊字符?它是否取决于正则表达式类型,例如PCRE,POSIX或扩展正则表达式?


问题答案:

实际上,您必须转义哪些字符以及您必须避免转义哪些字符确实取决于您使用的正则表达式风格。

对于PCRE和大多数其他所谓的与Perl兼容的风味,请避免使用以下外部字符类:

.^$*+?()[{\|

以及这些内部字符类:

^-]\

对于POSIX扩展正则表达式(ERE),请转义以下外部字符类(与PCRE相同):

.^$*+?()[{\|

转义任何其他字符是POSIX ERE的错误。

在字符类中,反斜杠是POSIX正则表达式中的文字字符。您不能使用它来逃避任何事情。如果要包括字符类元字符作为文字,则必须使用“巧妙放置”。将^放置在字符类的开头以外的任何位置,将]放在开头,将-放置在字符类的开头或结尾,以从字面上匹配这些字符,例如:

[]^-]

在POSIX基本正则表达式(BRE)中,这些是元字符,您需要对其进行转义以隐藏其含义:

.^$*[\

在BRE中转义括号和大括号给了它们特殊的含义,即它们在ERE中未转义的版本。一些实现(例如GNU)在转义时还赋予其他字符特殊的含义,例如\?。和+。转义。^ $ *(){}以外的字符通常是BRE的错误。

在角色类中,BRE与ERE遵循相同的规则。

如果所有这些使您的头部旋转,请抓住RegexBuddy的副本。在“创建”选项卡上,单击“插入令牌”,然后单击“文字”。RegexBuddy将根据需要添加转义符。



 类似资料:
  • 问题内容: Java或任何开放源代码库中是否有任何方法可以转义(不引用)特殊字符(元字符),以便将其用作正则表达式? 动态构建正则表达式非常方便,而不必手动转义每个字符。 例如,考虑一个简单的正则表达式,它匹配带小数点的数字,例如,以及以下代码: 毫不奇怪,以上代码产生的输出是: 也就是说,匹配项(但是“动态”构建的)不匹配(相反,它与文字字符串匹配)。 那么,有没有一种方法可以自动转义每个正则表

  • Java 或任何开源库中是否有任何方法可以转义(不引用)特殊字符(元字符),以便将其用作正则表达式? 这在动态构建正则表达式时非常方便,而无需手动转义每个单独的字符。 例如,考虑一个简单的正则表达式,如 \d \.,它匹配小数点()的数字,以及以下代码: 毫不奇怪,上述代码产生的输出是: 也就是说,匹配但(它是“动态”构建的)不匹配(相反,它匹配文字字符串)。 那么,有没有一种方法可以自动转义每个

  • 问题内容: 我刚刚编写了一个与php函数一起使用的正则表达式,其中包含以下部分: 匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨 “ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为 由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具

  • 问题内容: 我正在尝试用比Java regex语法更简单的通配符来匹配用户输入。假设有一个通配符A。然后,用户将输入输入字符串: 并将“ test”与搜索字符串匹配: 为此,我将搜索字符串中的通配符字符串替换为,因此我可以将通配符与常规正则表达式的捕获组进行匹配。但是,我仍然希望转义特殊字符。如果我使用引号,则正则表达式将不再起作用,因为带有正则表达式含义的字符()也被引用了: 是否有一种内置的方

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • 问题内容: 我正在尝试创建一个应用程序,该应用程序将消息模板与用户尝试发送的消息进行匹配。我正在使用Java正则表达式来匹配消息。模板/消息可能包含特殊字符。 我如何获取需要转义的特殊字符的完整列表,以使我的正则表达式在最大可能的情况下起作用并匹配? 是否存在通用的解决方案,可以在Java正则表达式中转义所有特殊字符? 问题答案: 你可以查看Pattern类的javadoc:http : //do