2012-03-22 39 views
1

我需要從給定的輸入中檢索正則表達式模式匹配的字符串。檢索正則表達式匹配模式

比方說,我需要得到的是一樣的格局,

"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg" 

現在,我創建了下面這樣的正則表達式模式,

http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg 

任何人能說明如何檢索所有匹配的模式這個regx表達式使用Java?

+0

如果您製作SSCCE,您可能會在此過程中解決自己的問題 – 2012-03-22 06:40:49

+0

爲什麼要遮掩斜槓? – 2012-03-22 06:46:23

回答

2

你不掩蓋斜線,但字面點:

String regex = "http://(.*)\\.mysite\\.com/(.*)/images/(.*)\\.jpg"; 
    String url = "http://www.mysite.com/work/images/cat.jpg"; 
    Pattern pattern = Pattern.compile (regex); 
    Matcher matcher = pattern.matcher (url); 

    if (matcher.matches()) 
    { 
     int n = matcher.groupCount(); 
     for (int i = 0; i <= n; ++i) 
      System.out.println (matcher.group (i)); 
    } 

結果:

www 
work 
cat 
2

一些簡單的Java例子:

String my_regex = "http://.*.mysite.com/.*/images/.*.jpg"; 
Pattern pattern = Pattern.compile(my_regex); 
Matcher matcher = pattern.matcher(string_to_be_matched); 
// Check all occurance 
while (matcher.find()) { 
    System.out.print("Start index: " + matcher.start()); 
    System.out.print(" End index: " + matcher.end() + " "); 
    System.out.println(matcher.group()); 
} 
+0

我試過上面的代碼,但我得到「非法轉義字符」的錯誤 – Dinesh 2012-03-22 06:58:50

+0

可能是因爲「\」,我測試了java中的正則表達式,它只是一個概念證明。讓我用右轉義序列編輯它。 – 2012-03-22 07:00:39

+0

更新了正則表達式 – 2012-03-22 07:03:54

1

事實上,目前尚不清楚,如果你想要整個匹配的字符串或只有組。

Bogdan Emil Mariesan's answer可以降低到

if (matcher.matches()) System.out.println(string_to_be_matched); 

,因爲你知道它是mathed,也沒有組。

恕我直言,user unknown's answer是正確的,如果你想獲得匹配的組。

我只是想添加更多的信息(替他人),如果你需要匹配的組可以使用replaceFirst()方法太:如果Pattern.compile辦法

​​

性能更好,如果有兩個或更多團體,或者如果您需要多次這樣做(另一方面,在編程比賽中,例如,編寫replaceFirst()會更快)。

+0

謝謝Betlista :) – Dinesh 2012-03-22 08:58:52