Java Regex只提供第一个或最后一个匹配而不是全部匹配

Ric*_*ick 1 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));
}
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

anu*_*ava 6

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

Pattern p = Pattern.compile("<option value=\"(.*?)\">(.*?)</option>");
Run Code Online (Sandbox Code Playgroud)

或者更好地:

Pattern p = Pattern.compile("<option value=\"([^\"]*)\">([^<]*)</option>");
Run Code Online (Sandbox Code Playgroud)

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

PS:还要注意我之后删除了额外的空间 </option>

  • @ user3254032摆脱模式末尾的空间. (3认同)