2014-12-03 23 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