此正则表达式“((?:[^()]|.((?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中没有使用它。
1条答案
按热度按时间axr492tv1#
如果正则表达式在许多正则表达式测试站点上都能正常工作,则应该使用
\((?:[^()]|((\?R)))+\)
而不是\((?:[^()]|((?R)))+\)
,因为?
在Java中是一个三元运算符,所以它显示? The preceding token is not quantifiable
。但是正则表达式不会在Java中运行,因为Java还不支持正则表达式子例程,所以请使用sln提供的
(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).)+?.*?(?=\1)[^(]*(?=\2)
。