所有需要在正则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()