【问题标题】:Java Regex giving only first or last match and not all of themJava Regex 只给出第一个或最后一个匹配,而不是全部
【发布时间】:2014-02-23 01:46:51
【问题描述】:

我正在尝试使用以下代码获取所有匹配项:

 String line = ("<option value=\"001\">Values go here </option> <option value=\"002\">More values in here</option>");
Pattern p = Pattern.compile("<option value=\"(.*)\">(.*)</option> ");
Matcher finder = p.matcher(line);
while(finder.find())
{
     System.out.println( finder.group(1));
     System.out.println( finder.group(2));
}

但我只得到最后一场或第一场比赛。 (取决于空格是在模式的末尾还是开头)

我做错了什么?

【问题讨论】:

    标签: java regex match


    【解决方案1】:

    让你的正则表达式不贪心(懒惰):

    Pattern p = Pattern.compile("<option value=\"(.*?)\">(.*?)</option>");
    

    或者更好:

    Pattern p = Pattern.compile("<option value=\"([^\"]*)\">([^<]*)</option>");
    

    您的正则表达式中的问题是使用了.*,这是贪婪的,并且匹配的文本比您想要的要多。

    PS: 另请注意,我在&lt;/option&gt; 之后删除了多余的空间

    【讨论】:

    • 嗯,我试图让它不贪心,但就像你的代码一样,它只给了我第一个匹配项。
    • @user3254032 去掉图案末尾的空格。
    • 需要注意的是,如果在&lt;option&gt; 行之间有新行,第二个选项会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多