2015-05-29 60 views
-1

的我有恩 HelloxyzxyzxyzHello計數在給定的行特定字符串使用正則表達式的Java

行我有以下的正則表達式來匹配該行

private static final Pattern matchPat = Pattern.compile("Hello(xyz)*Hello"); 
String line = "HelloxyzxyzxyzHello"; 
Matcher x8 = matchPat.matcher(line); 

現在我想獲得的計數xyz 在我的線上它是3

是否有從正則表達式可用的API,除了找到每個匹配模式和使用計數器。

+0

確實要算這是目前內部的兩個打招呼的爲XYZ? –

+0

是否確定xyz會在Hello之間發生? – Arjit

回答

1

你可以試試下面的正則表達式來獲取所有xyz計數這是目前內部的兩個Hello子。

import java.util.regex.*; 

class Test { 
    public static void main(String[] args) { 
     String hello = "HelloxyzxyzxyzHello"; 
     Pattern pattern = Pattern.compile("(?:Hello|(?<!^)\\G)(?:(?!Hello).)*?(xyz)(?=.*?Hello)"); 
     Matcher matcher = pattern.matcher(hello); 

     int count = 0; 
     while (matcher.find()) { 
      if (matcher.group(1)) { 
      count++; 
      } 
     } 
     System.out.println(count); // prints 3 
    } 
} 

DEMO

1

試試這個:

import java.util.regex.*; 

class Test { 
    public static void main(String[] args) { 
     String hello = "HelloxyzxyzxyzHello"; 
     Pattern pattern = Pattern.compile("xyz"); 
     Matcher matcher = pattern.matcher(hello); 

     int count = 0; 
     while (matcher.find()) 
      count++; 

     System.out.println(count); // prints 3 
    } 
} 

編輯:捕獲組

String line = "This order was placed for QT3000! OK?"; 
Pattern pattern = Pattern.compile("(.*?)(\\d+)(.*)"); 
Matcher matcher = pattern.matcher(line); 
while (matcher.find()) { 
    System.out.println("group 1: " + matcher.group(1)); 
    System.out.println("group 2: " + matcher.group(2)); 
    System.out.println("group 3: " + matcher.group(3)); 
} 
+0

我想要一個櫃檯外的解決方案。我的輸入行可能非常大,我可能有一個具有多個組的特定正則表達式。我想知道每個組的事件。在這個例子中,我給了一個簡單的例子。 – user3540481

相關問題