【问题标题】:Java Regex not finding any matchesJava 正则表达式未找到任何匹配项
【发布时间】:2018-07-21 17:16:30
【问题描述】:

我有以下示例字符串:

some random text term "thing I want" some more random text term "thing I want"

我正在使用以下正则表达式:

term\s?\"?([^\n\r]*)\"?

但是我的匹配器找不到任何匹配项,我不知道为什么。 这是我正在使用的代码:

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

    ArrayList<String> list = new ArrayList<String>();
    String regex = "term\\s?\\\"?([^\\n\\r]*)\\\"?";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(string);
        if (matcher.find()) {
            list.add(matcher.group(1));
        }

任何帮助将不胜感激。

【问题讨论】:

  • cannot find symbol: variable string。让您的样本易于测试(包括导入、声明所有使用的内容),这样就不必让 100 个读者弄清楚需要什么。
  • 这确实适合我 - 你确定你没有得到一个吗?您是否可能在list 而不是mesh 中检查它?
  • 您的期望是什么?
  • @userunknown 我写了上面的字符串,不过你对导入是正确的。我已经包含了导入。
  • @ShenYudong 我希望匹配器在 term "thing i want" 上找到匹配项,然后将 thing i want 添加到 arraylist

标签: java regex match


【解决方案1】:

这实际上对我来说是匹配的,但它会返回这个,这不是你想要的:

thing I want" some more random text term "thing I want"

发生这种情况是因为您的正则表达式允许捕获组包含引号,因此无法描述组的结尾并且它会消耗字符串的其余部分。您可以按以下方式防止这种情况(假设引号是强制性的):

String regex = "term\\s?\\\"([^\\n\\r\"]*)\\\"";

【讨论】:

  • 你是英雄!好的,所以这找到了一个匹配项,但是它似乎只找到一个匹配项,而不是它应该找到的多个匹配项。我应该将 matcher.find() 放在 for 循环中还是有一些标准方法可以做到这一点?
  • 耶!是的 - 只需将“if”更改为“while”,您就应该离开了!
  • 很高兴我能帮上忙!如果这解决了您的问题,您介意单击“勾选”按钮吗?这标志着问题已解决,因此其他人知道不要调查它。 (并且给了我一些额外的分数 \o/ )
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多