我有一个字符串hhht。我需要从字符串grep 1212121256565656。我到目前为止尝试过的内容如下所示。

String hhht = "dhdhdh<a:Rakesh>12121212</a:Rakesh>sdsdvsdvsvvsv"+"sfsf"+"<a:Rakesh>56565656</a:Rakesh>zvnbjvbj";

Pattern pattern    = Pattern.compile("<a:Rakesh>(.+)</a:Rakesh>");
Matcher matcher    = pattern.matcher(hhht);

for(int hh = 0 ;hh <matcher.groupCount(); hh++){
    if(matcher.find())
        System.out.println(matcher.group(hh+1));

}


我得到的输出是,

12121212</a:Rakesh>sdsdvsdvsvvsvsfsf<a:Rakesh>56565656


即模式与第一个<a:Rakesh>标签匹配。

最佳答案

您有一个贪婪的匹配器,不仅限于匹配号。这意味着它将尽可能匹配。由于您有两个匹配的标签,因此它将捕获第一个标签的开始和第二个标签的结束之间的每个字符。

您可以使其不贪心(它将尽早停止,在第一个</a:Rakesh>处停止)或使其仅与数字匹配(不匹配</a:Rakesh>,在此点处停止)。

仅匹配数字:

"<a:Rakesh>(\\d+)</a:Rakesh>"


这是非贪婪的方法:

"<a:Rakesh>(.+?)</a:Rakesh>"

07-25 20:19