我有一个很长的正则表达式,似乎有问题,但仅当从文本文件导入时才会出现问题。我已将其范围缩小到以下部分(此处显示为文字字符串):
"(?i)(?<!\\w)\\w{2,3}(?=\\))"
正如您所看到的,在接近尾声时,我试图逃避右括号以进行前瞻。现在,如果这是硬编码的,例如:
Pattern myPattern = Pattern.compile("(?i)(?<!\\w)\\w{2,3}(?=\\))");
它完全按照预期工作。但是,如果我从文本文件中读取它,例如:
File patternFile = new File("patterns.txt");
List<String> patternText = FileUtils.readLines(patternFile);
String ucText = patternText.get(0).trim();
Pattern myPattern = Pattern.compile(ucText);
然后我收到错误消息:
Exception in thread "Thread-4" java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 25
(?i)(?<!\\w)\\w{2,3}(?=\\))
^
那么,为什么会发生这种情况呢?为什么在硬编码时转义右括号是合法的,但在从文本文件读取时却不行?
最佳答案
您正在编写 Java 字符串文字。 \)
不是 Java 字符串文字的合法转义代码。
您需要使用 \\
转义每个反斜杠,以便为正则表达式创建带有单个反斜杠的字符串。
关于java - Java 中无法转义右括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30492908/