2014-12-03 79 views
-1

我想寫一個正則表達式來匹配一個以字母「G」開頭的字符串,第二個索引應該是任意數字(0-9),並且字符串的其餘部分可以包含任何的事情,可以是任何長度, 卻困在下面的代碼java正則表達式匹配沒有長度限制的例子

String[] array = { "DA4545", "G121", "G8756942", "N45", "4578", "#45565" }; 

String regExp = "^[G]\\d[0-9]"; 

for(int i = 0; i < array.length; i++) 
{ 
    if(Pattern.matches(regExp, array[i])) 
    { 
     System.out.println(array[i] + " - Successful"); 
    } 
} 

輸出:

G12 - 成功

爲什麼不匹配3指數 「G8756942」

回答

0
G - the letter G 
[0-9] - a digit 
.* - any sequence of characters 

所以表達式

G[0-9].* 

將匹配一個字母G後跟數字後跟任何字符序列。

+0

Thanksx it worked – dilee 2014-12-03 08:22:58

0

當你寫\d它已經意味着[0-9]

所以當你說\d[0-9],這意味着兩個數字恰好

更好地利用:

^G\\d* 

它將匹配所有的單詞開頭G和有零個或多個數字

0

這個正則表達式應該沒問題。

因爲matches方法試圖對整個輸入相匹配,則需要在最後在你的模式添加.*,你也並不需要包括錨。

String[] array = { "DA4545", "G121", "G8756942", "N45", "4578", "#45565" }; 

String regExp = "G\\d.*"; 

for(int i = 0; i < array.length; i++) 
{ 
    if(Pattern.matches(regExp, array[i])) 
    { 
     System.out.println(array[i] + " - Successful"); 
    } 
} 

輸出:

G121 - Successful 
G8756942 - Successful 
0
"^[G]\\d[0-9]" 

此正則表達式的 「G」,接着\\d,然後另一個號碼相匹配。

使用下列操作之一:

  • "^G\\d"
  • "^G[0-9]"

還要注意的是,你並不需要一個字符類,因爲它只包含一個字母,所以它是多餘的。

0

因爲你匹配開始G一個字符串,然後是\,一個d和恰好有一個數字爲什麼不匹配3指數「G8756942」

。解決方案:

^[G]\d