将用户提供的字符串转换为文字字符串,以附加预定义的正则表达式

时间:2011-10-28 15:01:42

标签: java regex

我有一个用户提供的字符串,然后我需要变成一个正则表达式,其字符串被视为文字,然后我在末尾附加一个预先写好的正则表达式。

基本上,这是一种说“用户提供的内容,然后是此模式”的方法。

这让我觉得我可能需要清理用户提供的字符串,以转义元字符。

举个例子,这就是我试过的

\\ Replace "\" with "\\"
String rE = userText.replaceAll("\\", "\\\\");
\\ Replace . with \.
rE = rE.replaceAll(".", "\\.");

但是,匹配\ escaping

时,会出现以下消息
Execution aborted because of unhandled exception:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^ at java.util.regex.Pattern.error(Pattern.java:1725)
at java.util.regex.Pattern.compile(Pattern.java:1478)

有更简单的方法吗?我怀疑有一种内置方法可以将潜在的regEx用于文字,但我找不到它。

我已经查看了类似的问题,但似乎没有人想要将用户输入字符串视为文字。

2 个答案:

答案 0 :(得分:6)

使用Pattern.quote方法将用户提供的字符串引用为 literal 模式。

答案 1 :(得分:1)

使用Pattern.quote method转义所有元字符或转义序列:

String rE = Pattern.quote("\\");
  

此方法生成String,可用于创建与Pattern字符串匹配的s,就好像它是文字模式一样。