【问题标题】:REGEX to match the last nested token [duplicate]正则表达式匹配最后一个嵌套令牌[重复]
【发布时间】:2021-04-29 14:35:04
【问题描述】:

我需要创建一个 REGEX 来捕获最后一个 'if' 子句的表达式。

例如,给定以下语句:

  if ( if( (1+1 == 2, 1, 2)), 3);

我要匹配:

((1+1 == 2, 1, 2))

我试过了,但它不起作用:

if\(\.*^(?!if)\)

【问题讨论】:

  • 最后一个 if 中也可以有嵌套括号,例如if ( if( ( x + y) *2 > 2, 1, 2)), 3);
  • 所以我只想检索 (( x + y) *2 > 2, 1, 2)

标签: java regex


【解决方案1】:

您可以使用以下正则表达式:

if\(\s*\([^()]*\)\)

RegEx Demo

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String args[]) {
        Matcher matcher = Pattern.compile("if\\(\\s*\\([^()]*\\)\\)").matcher("if ( if( (1+1 == 2, 1, 2)), 3);");
        if (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

输出:

if( (1+1 == 2, 1, 2))

来自regex101的正则表达式解释:

【讨论】:

  • 请检查我对这个问题的评论,这个正则表达式也不适用于嵌套括号
  • 感谢您的帮助!
【解决方案2】:

这个正则表达式运行,结果在第 1 组($1)中

^if\s?((.),.);$

【讨论】:

  • 我尝试在regex101.com 上运行它,但测试也失败了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多