java - 需要在正则表达式中转义的所有特殊字符的列表

我正在尝试创建一个与消息模板匹配的应用程序以及用户尝试发送的消息。 我正在使用Java正则表达式来匹配消息。 模板/消息可能包含特殊字符。

为了让我的正则表达式在最大可能情况下工作和匹配,我如何获得需要转义的特殊字符的完整列表?

是否有一个通用的解决方案来逃避Java正则表达式中的所有特殊字符?

Avinash Nair asked 2019-09-11T07:48:44Z
8个解决方案
77 votes

你可以看一下Pattern类的javadoc:[http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html]

如果你想要常规字符而不是特殊含义,你需要转义那里列出的任何字符。

作为一个可能更简单的解决方案,您可以将模板放在\ Q和\ E之间 - 它们之间的所有内容都被视为转义。

Sorin answered 2019-09-11T07:49:11Z
74 votes
  • 必须在正则表达式中转义的Java字符是:
    ]
  • 两个关闭括号(]})只需在打开相同类型的支架后进行转义。
  • []括号中,某些字符(如+-)有时会无法逃脱。
Tobi G. answered 2019-09-11T07:49:57Z
21 votes

要逃避,你可以从Java 1.5中使用它:

Pattern.quote("$test");

您将完全匹配单词$test

madx answered 2019-09-11T07:50:29Z
15 votes

根据String Literals / Metacharacters文档页面,它们是:

<([{\^-=$!|]})?*+.>

将代码列入代码中的某个位置也很酷,但我不知道那可能是哪个...

Bohdan answered 2019-09-11T07:51:08Z
5 votes

关于@ Sorin对Java Pattern文档的建议,看起来像要逃脱的字符至少是:

\.[{(*+?^$|
pete answered 2019-09-11T07:51:34Z
4 votes

结合大家所说的,我提出以下建议,保持RegExp特有的字符列表清楚地列在他们自己的String中,并避免不得不尝试在视觉上解析成千上万的“\\”。 这对我来说似乎很有效:

final String regExSpecialChars = "<([{\\^-=$!|]})?*+.>";
final String regExSpecialCharsRE = regExSpecialChars.replaceAll( ".", "\\\\$0");
final Pattern reCharsREP = Pattern.compile( "[" + regExSpecialCharsRE + "]");

String quoteRegExSpecialChars( String s)
{
    Matcher m = reCharsREP.matcher( s);
    return m.replaceAll( "\\\\$0");
}
NeuroDuck answered 2019-09-11T07:51:59Z
2 votes

在硬币的另一面,你应该使用看起来像这样的“非char”正则表达式,如果特殊字符= allChars - 数字 - ABC - 你的应用程序上下文中的空格。

String regepx = "[^\\s\\w]*";
Bo6Bear answered 2019-09-11T07:52:25Z
0 votes

不确定我完全理解你的问题,但我认为你应该看看Matcher.quoteReplacement()

mkoryak answered 2019-09-11T07:52:49Z
translate from https://stackoverflow.com:/questions/14134558/list-of-all-special-characters-that-need-to-be-escaped-in-a-regex