在Java中转义这个长正则表达式

在Java中转义这个长正则表达式,java,regex,Java,Regex,我有一个可以正常工作的正则表达式,它与在线正则表达式工具(如)的字符串正确匹配。然而,当在Java中使用它时,我会遇到一个解析器异常 正则表达式: ^(?:name = \")([\w]*)(?:\"\ncoords = \"\[)(?:[\d\.]*)(?:\,)(?:[\d\.]*)(?:\,)([\d\.]*)(?:\]\") 要匹配的文本是: name = "abc" coords = "[0.0,0.0,666]&

我有一个可以正常工作的正则表达式,它与在线正则表达式工具(如)的字符串正确匹配。然而,当在Java中使用它时,我会遇到一个解析器异常

正则表达式:

^(?:name = \")([\w]*)(?:\"\ncoords = \"\[)(?:[\d\.]*)(?:\,)(?:[\d\.]*)(?:\,)([\d\.]*)(?:\]\")
要匹配的文本是:

name = "abc"
coords = "[0.0,0.0,666]"
在在线工具中,正则表达式的作用正是我想要的:为name值(这里是abc)和z坐标值(这里是666)创建一个捕获组,而忽略其余部分

现在我想在Java中使用这个正则表达式来匹配相同的文本。然而,即使我 使用另一个反斜杠转义每个反斜杠,并使用另一个反斜杠转义每个“执行将导致解析异常。例如,以下情况将不起作用:

String regex = "^(?:name = \\\")([\\w]*)(?:\\\"\\ncoords = \\\"\\[)(?:[\\d\\.]*)(?:\\,)(?:[\\d\\.]*)(?:\\,)([\\d\.]*)(?:\\]\\\")";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(THE ABOVE TEXT); 
我也尝试过使用Matcher.quoteReplacement(),但要么我不明白它是如何工作的,要么我做错了什么。当我已经转义了元字符时,可能甚至不需要这样做。 还是还有更多的可以逃避

我如何用Java正确地编写它?
此外,欢迎对此正则表达式提出任何缩写建议。

这是正确的转义正则表达式:

String regex = "^(?:name = \")([\\w]*)(?:\"\\ncoords = \"\\[)(?:[\\d.]*)(?:,)(?:[\\d.]*)(?:,)([\\d.]*)(?:]\")";
该错误是由句点前缺少第二个反斜杠引起的

不管怎样,很多东西(比如引号、逗号、方括号内的句点等)都不需要去掉正则表达式


小提示:如果您使用的是智能IDE(如IntelliJ IDEA),只需将原始正则表达式复制粘贴到一个空字符串(
“”
)中,它就会自动进行Java转义。此外,IDE可能会建议您删除一些冗余转义。

不是一个简单的基于行的“解析器”更简单?您没有将每个反斜杠加倍:
[\\d\.]
将无法编译。