我正在尝试使用以下代码获取所有匹配项:
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/