Java Regex仅提供第一场或最后一场比赛,而不是全部



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

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

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

我在做什么错?

使您的正则不盖迪(Lazy):

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

或更好地:

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

您的正则问题是使用.*,它比您所需的文字更匹配。

ps:还请注意,</option>

后我有删除额外的空间

最新更新