我正在逐行解析一个.txt,并考虑一个目标令牌。我用的是正则处理器引擎。
我将每一行与:
"(^|.*[\\s])"+token+"([\\s].*|$)"
其中令牌是字符串。在以下情况下:
token="6-7(3-7"
它产生了以下例外:
Exception in thread "main" java.util.regex.PatternSyntaxException:
Unclosed group near index 27
(^|.*[\s])6-7(3-7([\s].*|$)
我怎么才能解决这个问题?
发布于 2015-05-15 01:52:05
你的记号里有特殊的字符。
看看Pattern.quote()
公共静态字符串引号(字符串s) 返回指定字符串的文字模式字符串。 此方法生成一个字符串,该字符串可用于创建与字符串s匹配的模式,就好像它是文字模式一样。 输入序列中的元字符或转义序列将没有特殊意义。
这应该对你有好处:
String pattern = "(^|.*[\\s])" + Pattern.quote(token) + "([\\s].*|$)";
不用自己做绳子魔术!:)
发布于 2015-05-15 01:49:48
您应该确保在任何用于生成regex模式的纯文本字符串中转义特殊字符。将"("
替换为"\("
,并类似地替换为裸反斜杠(在任何其他步骤之前)、句点和所有其他特殊字符,至少所有您希望在输入中看到的字符。(如果它是用户的任意输入,则假设每个字符都将包括在内。)
https://stackoverflow.com/questions/30250194
复制相似问题