【问题标题】:How to make regex matching group excluding the matching characters?如何使正则表达式匹配组排除匹配字符?
【发布时间】:2014-03-11 11:58:59
【问题描述】:

我想匹配/提取字符串asd{test}asd中的单词test

我的正则表达式:({test}.*) 将匹配 {test}。我如何能: - 匹配刹车内的任何东西? - 从匹配组中排除括号? - 使匹配组可选?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您可以尝试使用look-around 机制,例如(?<=\\{)[^}]*(?=\\})

    演示:

    String data = "asd{test}asd";
    Pattern p = Pattern.compile("(?<=\\{)[^{}]*(?=\\})");
    Matcher m = p.matcher(data);
    if(m.find())
        System.out.println(m.group());
    

    输出:test

    解释:

    • [^{}]* - 将匹配零个或多个非 {} 字符
    • (?&lt;=\\{) - 前面有{(我们需要在这里转义{,因为它是正则表达式元字符)
    • (?=}) - 和 } 之后
      (我们不必在这里转义 },因为它不是 {..} 量词的一部分)

    【讨论】:

      【解决方案2】:

      使用({(test)}.*) 并获取group(1)

      【讨论】:

      • 做外部不匹配组不是更好吗,比如(?:{(test)}.*)
      猜你喜欢
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多