我有一个用户提供的字符串,然后我需要变成一个正则表达式,其字符串被视为文字,然后我在末尾附加一个预先写好的正则表达式。
基本上,这是一种说“用户提供的内容,然后是此模式”的方法。
这让我觉得我可能需要清理用户提供的字符串,以转义元字符。
举个例子,这就是我试过的
\\ 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用于文字,但我找不到它。
我已经查看了类似的问题,但似乎没有人想要将用户输入字符串视为文字。
答案 0 :(得分:6)
使用Pattern.quote
方法将用户提供的字符串引用为 literal 模式。
答案 1 :(得分:1)
使用Pattern.quote
method转义所有元字符或转义序列:
String rE = Pattern.quote("\\");
此方法生成
String
,可用于创建与Pattern
字符串匹配的s
,就好像它是文字模式一样。