java - Java 中无法转义右括号?

标签 java regex escaping

我有一个很长的正则表达式,似乎有问题,但仅当从文本文件导入时才会出现问题。我已将其范围缩小到以下部分(此处显示为文字字符串):

"(?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/

相关文章:

java - 从 Android URL 加载大量图像的最有效方法

ruby - 在 Nokogiri 元素中编辑文本或使用正则表达式

javascript - 使用正则表达式匹配并删除字符串中直到并包括 "="的所有内容

regex - 如何在 Apache `/` 指令的正则表达式中转义斜杠符号 `<If>`?

javascript - 从服务器向客户端发送 JSON 格式的 HTML 时,我应该转义内容吗?

java - 使用 OpenAL(java 和 lwjgl)缓冲 Wav 文件

java - 持久性、oracle Thin、ORA-12505、TNS 监听器当前不知道 SID

java - 无法使用 GSON 将某些 JSON 解析为 JsonArray

c# regex 和 [] expression ,为什么 [+*/-] 无法解析?

json - Shell 脚本空格转义