我需要從給定的輸入中檢索正則表達式模式匹配的字符串。檢索正則表達式匹配模式
比方說,我需要得到的是一樣的格局,
"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg"
現在,我創建了下面這樣的正則表達式模式,
http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg
任何人能說明如何檢索所有匹配的模式這個regx表達式使用Java?
我需要從給定的輸入中檢索正則表達式模式匹配的字符串。檢索正則表達式匹配模式
比方說,我需要得到的是一樣的格局,
"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg"
現在,我創建了下面這樣的正則表達式模式,
http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg
任何人能說明如何檢索所有匹配的模式這個regx表達式使用Java?
你不掩蓋斜線,但字面點:
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
一些簡單的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());
}
我試過上面的代碼,但我得到「非法轉義字符」的錯誤 – Dinesh 2012-03-22 06:58:50
可能是因爲「\」,我測試了java中的正則表達式,它只是一個概念證明。讓我用右轉義序列編輯它。 – 2012-03-22 07:00:39
更新了正則表達式 – 2012-03-22 07:03:54
事實上,目前尚不清楚,如果你想要整個匹配的字符串或只有組。
Bogdan Emil Mariesan's answer可以降低到
if (matcher.matches()) System.out.println(string_to_be_matched);
,因爲你知道它是mathed,也沒有組。
恕我直言,user unknown's answer是正確的,如果你想獲得匹配的組。
我只是想添加更多的信息(替他人),如果你需要匹配的組可以使用replaceFirst()
方法太:如果Pattern.compile辦法
但性能更好,如果有兩個或更多團體,或者如果您需要多次這樣做(另一方面,在編程比賽中,例如,編寫replaceFirst()
會更快)。
謝謝Betlista :) – Dinesh 2012-03-22 08:58:52
如果您製作SSCCE,您可能會在此過程中解決自己的問題 – 2012-03-22 06:40:49
爲什麼要遮掩斜槓? – 2012-03-22 06:46:23