我这里的剧本有多个"("和")":
#if( a == b && a == c ) Content 1 #elseif( ( a == b ) && (a != c) ) Content 2 #elseif( (a != b) && (a != c) ) Content 3 #end
我想使用java.util.regex.Pattern来获取此脚本的条件。我想要的结果是:
我使用过: 模式模式= Pattern.compile("(#if | #elseif)+(。*?)((([^]]){1,}))"); 但结果并未预料到。请帮我这里的正则表达式。 非常感谢你。
答案 0 :(得分:1)
不幸的是,Java不支持递归,因此您无法正确匹配平衡的括号组。如果您不希望if / elseif条件之后的部分包含括号,则可以使用以下解决方法:
(?m)^#(?:if|elseif).*? (?!.*[()])(.+)
答案 1 :(得分:1)
试试这个正则表达式:
(?:if|elseif)\s*\((?:[^()]+\)|.*?\)(?:\s*\))+)
<强>解释强>
(?:if|elseif)
- 匹配if
或elseif
\s*
- 匹配0个以上的空白字符[^()]+\)
- 匹配任何不是(
和)
的字符的1次出现。然后是匹配的)
|
- 或.*?\)(?:\s*\))+
- 使用嵌套括号()
更新了表达式: