2014-09-30 70 views
0

我有這樣的代碼來找到這個模式:201409250200131738007947036000 - 1,文本正則表達式30個號碼+空格+連字符+空格+ 1號

   final String patternStr = "(\\d{30} - \\d{1})"; 
       final Pattern p = Pattern.compile(patternStr); 


        final Matcher m = p.matcher(page); 
        if (m.matches()) { 
         System.out.println("SUCCESS"); 
        } 

內,但對於任何陌生reasson在Java中我以前不工作,有人可以幫我解決錯誤嗎?

+0

您是否試圖找到該模式_inside_文本來檢查整個'String'是否匹配該模式?你也不需要括號。 – 2014-09-30 09:12:25

+0

爲什麼在使用String.matches時使用Pattern-Matcher? 順便說一句,我的代碼工作正常。 – blackSmith 2014-09-30 09:13:58

回答

4

原因是matches方法檢查整個給定的字符串以匹配正則表達式。

所以,即如果你的字符串是123456123412345612341234561234 - 8它將匹配,如果它是my number 123456123412345612341234561234 - 8 is inside other text它不會。

使用find方法來完成你的任務:

if (m.find()) { 
    System.out.println("SUCCESS"); 
} 

它將內部給定的字符串,而不是試圖將整個字符串匹配搜索。

+0

謝謝,你是對的,現在可以工作了! .D – 2014-09-30 11:24:15

+0

@JOANA_Batista很高興工作!別客氣! :) – BackSlash 2014-09-30 11:28:12

2

documentation for Matchermatches

嘗試來匹配圖案的整個區域。

與之相對find其中:

試圖找到與該模式匹配的輸入序列的下一個子序列。

因此,使用matches以匹配整個String阻止圖形,使用find找到一個String內的模式。

嘗試:

final String patternStr = "\\d{30}+\\s-\\s\\d"; 
final Pattern p = Pattern.compile(patternStr); 

final Matcher m = p.matcher(page); 
while (m.find()) { 
    System.out.printf("FOUND A MATCH: %s%n", matcher.group()); 
} 

我編輯您的模式略有使其更加堅固。這將打印每個匹配它找到。

+0

@AvinashRaj謝謝,編輯。 – 2014-09-30 09:16:10

+0

謝謝,這是真的,現在可以工作,:D – 2014-09-30 11:23:52

相關問題