val data = "val re = \"\"\"^[^/]*://[^/]*/[^/]*$\"\"\".r" val source = """here LATEX_THING{abc} there""" val re = "LATEX_THING\\{abc\\}".r println(re.replaceAllIn(source,data))
这会出现以下错误:
java.lang.IllegalArgumentException: Illegal group reference
如果我将数据从简单的内容更改为简单的内容:
val data = "This will work"
一切都很好.
看起来像replaceAllIn以某种方式查看第二个字符串并将其用作另一个RE来引用从第一个RE记住的内容……但是文档对此没有任何说明.
我错过了什么?
编辑:好的,所以在查看java.util.regex.Matcher类之后,似乎预期的修复是:
re.replaceAllIn(source,java.util.regex.Matcher.quoteReplacement(data))
val data = "val re = \"\"\"^[^/]*://[^/]*/[^/]*\\$\"\"\".r"
否则,它被解释为组引用的开头(仅当$后跟一个或多个数字时才有效).有关更多详细信息,请参阅the documentation for java.util.regex.Matcher:
The replacement string may contain references to subsequences captured
during the previous match: Each occurrence of$g
will be replaced by
the result of evaluatinggroup(g)
… A dollar sign ($
) may be
included as a literal in the replacement string by preceding it with a
backslash (\$
).
更新以解决您的评论并在上面编辑:是的,如果您不使用字符串文字(或者如果您是,我猜,但是在这种情况下逃避$似乎更容易),您可以使用Matcher.quoteReplacement,并且至少a chance将来,indexReplacement将作为scala.util.matching.Regex上的方法提供.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。