Java Regex 只给出第一个或最后一个匹配项,而不是所有匹配项

标签 java regex match

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

 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));
}

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

我做错了什么?

最佳答案

让你的正则表达式是非贪婪的(惰性的):

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

或更好地:

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

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

PS:另请注意,我已删除 </option> 之后的多余空间

关于Java Regex 只给出第一个或最后一个匹配项,而不是所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461883/

相关文章:

java - 如何自动运行maven命令,而不是通过命令?

java - 如何在 hibernate 中使用一对一映射执行插入

python - 如何重新搜索或重新匹配整个文件而不将其全部读入内存?

vba - VBA 中的应用程序匹配

c# - 在 C# 中搜索字符串中的部分子字符串

c# - 正则表达式捕获多字符分隔符

java - JPanel 中的 TitledBorder 在使用 translate() 方法时移动

php - 如何使用 php 从 html 中提取 img src、title 和 alt?

javascript - 将字符串拆分为每个索引 n 个单词的数组

java - 从抽象类返回 Java 上的通用对象