How to extract the operands on both sides of "==" using regex?
python3.8,正则表达式
描述
输入和想要的输出如下:
if (programWorkflowState.getTerminal(1, 2) == Boolean.TRUE) {
想要:
boolean ignore = !_isInStatic.isEmpty() && (_isInStatic.peek() == 3) && isAnonymous;
想要:
boolean b = (num1 * ( 2 + num2)) == value;
想要:
我目前的正则表达式
此模式要匹配 "=="
两侧的
regex101.com 上的结果
问题:无法匹配递归部分
递归模式
但是如果我只使用递归模式,它会成功匹配
什么是正确的正则表达式来实现我的目的?
你需要用一个组来package你需要递归的模式,并使用一个子例程而不是
你可以使用
1 | ((?:(?P\\((?:[^()]++|(?&aux1))*\\))|[\\w.])++)\\s*[!=]=\\s*((?:(?&aux1)|[\\w.])+) |
查看这个正则表达式演示(匹配提??供的字符串只需要 6875 步,你的需要 13680)
详情
-
((?:(?P\\((?:[^()]++|(?&aux1))*\\))|[\\w.])++) - 组 1,匹配一个或多个匹配项(可能由于++ ,不允许回溯到模式中,因此如果后续模式无法匹配,正则表达式引擎无法以另一种方式重新尝试匹配字符串)-
(?P\\((?:[^()]++|(?&aux1))*\\)) - 一个与( 匹配的辅助组"aux1",然后出现零次或多次出现( 和) 以外的 1 个字符或整个组"aux1"模式,然后是) -
| - 或 -
[\\w.] - 字母、数字、下划线或.
-
-
\\s*[!=]=\\s* -!= 或== 两端有零个或多个空格 -
((?:(?&aux1)|[\\w.])+) - 组 2:组"辅助"模式或字母、数字、下划线或. 的一个或多个出现。