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

我正在尝试创build一个应用程序,该消息与用户试图发送的消息匹配的消息模板。 我使用Java正则expression式来匹配消息。 模板/消息可能包含特殊字符。

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

是否有一个通用的解决scheme来转义Java正则expression式中的所有特殊字符?

您可以查看Pattern类的javadoc: http : //docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

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

作为一个可能更简单的解决scheme,你可以把模板放在\ Q和\ E之间 – 它们之间的所有东西都被认为是被转义的。

  • 必须在正则expression式中转义的Java字符是:
    \.[]{}()*+-?^$|
  • 两个右括号( ]} )只需要在打开相同types的括号后进行转义。
  • []有些字符(比如+- )有时无法转义。

根据string文字/元字符文档页面,他们是:

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

还有,这个清单在代码的某个地方被引用会很酷,但是我不知道这个清单可能在哪里。

为了逃避,你可以在Java 1.5中使用它:

 Pattern.quote("$test"); 

你会匹配确切的单词$test

在@Sorin的Java模式文档的build议,看起来像字符逃脱至less是:

 \.[{(*+?^$| 

结合大家所说的话,我提出以下build议,以保持RegExp特有的字符列表清楚地列在它们自己的string中,并避免必须尝试直观地parsing数千个“\\”。 这似乎对我来说很好:

 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"); } 

在硬币的另一面,如果特殊字符= allChars – number – ABC – 您的应用上下文中的空间,则应该使用“non-char”正则expression式。

 String regepx = "[^\\s\\w]*"; 

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