gpt4 book ai didi

regex - 如何使用正则表达式提取 "=="两侧的操作数?

转载 作者:行者123 更新时间:2023-12-04 13:33:05 25 4
gpt4 key购买 nike

语言和包
python3.8,正则表达式
说明
输入和想要的输出如下所列:

if (programWorkflowState.getTerminal(1, 2) == Boolean.TRUE) {


旺旺: programWorkflowState.getTerminal(1, 2)Boolean.TRUE

boolean ignore = !_isInStatic.isEmpty() && (_isInStatic.peek() == 3) && isAnonymous;


旺旺: _isInStatic.peek()3

boolean b = (num1 * ( 2 + num2)) == value;


旺旺: (num1 * ( 2 + num2))value 我当前的正则表达式 ((?:\((?:[^\(\)]|(?R))*\)|[\w\.])+)\s*==\s*((?:\((?:[^\(\)]|(?R))*\)|[\w\.])+)此模式要匹配 \((?:[^\(\)]|(?R))*\)[\w\.]在“==”的两边
Result on regex101.com
问题 : 递归部分匹配失败 (num1 * ( 2 + num2)) .
递归模式的解释 \((?:m|(?R))*\)here
但是如果我只使用递归模式,它成功匹配 (num1 * ( 2 + num2))image显示。
实现我的目的的正确正则表达式是什么?

最佳答案

\((?:m|(?R))*\)模式包含 (?R)构造(等于 (?0) 子例程)递归整个模式。
您需要将需要递归的模式与组一起包装并使用子例程而不是 (?R)递归构造,例如(?P<aux>\((?:m|(?&aux))*\))在更长的模式中递归模式。
您可以使用

((?:(?P<aux1>\((?:[^()]++|(?&aux1))*\))|[\w.])++)\s*[!=]=\s*((?:(?&aux1)|[\w.])+)
this regex demo (匹配提供的字符串只需要 6875 步, yours takes 13680)
详情
  • ((?:(?P<aux1>\((?:[^()]++|(?&aux1))*\))|[\w.])++) - 第 1 组,匹配一个或多个出现(可能是由于 ++,不允许回溯到模式中,因此如果后续模式无法匹配,正则表达式引擎无法以另一种方式重新尝试匹配字符串)
  • (?P<aux1>\((?:[^()]++|(?&aux1))*\)) - 匹配 ( 的辅助组“aux1” ,然后出现零次或多次除 ( 之外的 1+ 字符和 )或整个组“aux1”模式,然后是 )
  • | - 或
  • [\w.] - 字母、数字、下划线或 .

  • \s*[!=]=\s* - !===两端有零个或多个空格
  • ((?:(?&aux1)|[\w.])+) - 第 2 组:出现一次或多次组“辅助”模式或字母、数字、下划线或 . .
  • 关于regex - 如何使用正则表达式提取 "=="两侧的操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63808997/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com