regex Java中的正则表达式错误“\((?:[^()]|.((?R)))+\)”

qxgroojn  于 2023-03-13  发布在  Java
关注(0)|答案(1)|浏览(228)

此正则表达式“((?:[^()]|.((?R)))+)”正在Regex101站点上运行,但它使用JAVA匹配器引发了sintaxException。
错误:Caused by: java.util.regex.PatternSyntaxException: Unknown inline modifier near index 14 \((?:[^()]|((?R)))+\)
Java正则表达式引擎似乎不接受“R”。不幸的是,这似乎是获得我需要的匹配的唯一方法:
假设这是我需要解析的源字符串:
my params ( string(80), string(30), string(10) ) as ...
我需要得到第一个“(“和结束“)”(最后一个在as之前)之间的内容。这只是一个例子,除了左括号和右括号的“数学序列”之外,我没有其他的“钩子”。关于如何解决这个问题有什么建议吗(以某种方式或其他方式?)regex在许多regex测试站点上都是有效的,但在Java中没有使用它。

axr492tv

axr492tv1#

如果正则表达式在许多正则表达式测试站点上都能正常工作,则应该使用\((?:[^()]|((\?R)))+\)而不是\((?:[^()]|((?R)))+\),因为?在Java中是一个三元运算符,所以它显示? The preceding token is not quantifiable
但是正则表达式不会在Java中运行,因为Java还不支持正则表达式子例程,所以请使用sln提供的(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).)+?.*?(?=\1)[^(]*(?=\2)

相关问题