簡體   English   中英

Java正則表達式用於第一個匹配的字符串

[英]Java Regex for first matching String

我有一個字符串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>標簽匹配。

  1. 使用帶有DOTALL標志的非貪婪正則表達式:

     Pattern pattern = Pattern.compile("(?s)<a:Rakesh>(.+?)</a:Rakesh>"); 
  2. 而且您無法在調用find之前獲取matcher.groupCount()

這樣使用

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

您有一個貪婪的匹配器,不僅限於匹配號。 這意味着它將盡可能匹配。 由於您有兩個匹配的標簽,因此它將捕獲第一個標簽的開頭和第二個標簽的結尾之間的每個字符。

您可以使其不貪心(它將盡早停止,在第一個</a:Rakesh>處停止)或使其僅與數字匹配(與</a:Rakesh>不匹配,然后在該點停止) 。

僅匹配數字:

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

這是非貪婪的方法:

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

這取決於問候匹配:采用以下模式:

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

有關更多信息, 請參見此線程

您應該使用while循環:

    while (matcher.find()) {
            System.out.println(matcher.group(1));

    }       

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM