2012-01-30 36 views
0

嗨我想檢查字符串應包含逗號,在每12個字符使用匹配和模式在Java中。我已經使用^([a-zA-Z0-9\\-?\\,])+$這種模式不適合我的要求任何人都可以提供這方面的解決方案。 這裏是我的代碼:如何檢查每12個字符應該在字符串中使用正則表達式模式?

package com.ibm.rock; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test{ 

     private Pattern pattern; 
     private Matcher matcher; 


private static final String EMAIL_PATTERN ="^([a-zA-Z0-9]{11},)*[a-zA-Z0-9]{0,11}$"; 


     public Test(){ 
      pattern = Pattern.compile(EMAIL_PATTERN); 
     } 

     /** 
     * Validate hex with regular expression 
     * @param hex hex for validation 
     * @return true valid hex, false invalid hex 
     */ 
     public boolean validate(final String hex){ 
      System.out.println(hex.length()); 
      String value=hex.trim().replaceAll(" ",""); 


      matcher = pattern.matcher(value); 
        System.out.println("matcher:"+matcher); 
      return matcher.matches(); 
      }else{ 
       return false; 
      } 

     } 
     public static void main(String[] args) { 
     System.out.println("ProjectsValidation::"+new Test().validate("IN-07-00177 , IN-07-00533")); 

     } 
} 
+1

你能再細說一下嗎?你想每12個角色尋找一個特定的角色嗎?或者你是否在尋找一系列角色?你試圖找到的例子會有很大的幫助。 – Michael 2012-01-30 13:22:57

+0

我正在爲字符串中的每個第12個字符尋找',' – 2012-01-30 13:24:35

回答

3

如果你只想找每12個字符,你可以把它很簡單:

/^(.{11},)*.{0,11}$/ 

如果你想要沒有逗號除了在第12位,請嘗試

/^([^,]{11},)*[^,]{0,11}$/ 
+0

問題是,如果字符串是「OK」,OP希望它匹配或不匹配?我對這個問題的理解是,他不希望它匹配。但你的正則表達式確定。 – Kent 2012-01-30 13:44:37

+0

感謝BryanH,這是每12個字符都應該工作,甚至它應該只允許[12]字符中的[a-zA-Z0-9 \\ - ],如何在正則表達式中添加這個。 – 2012-01-30 13:44:41

+0

嗨BryanH我修改了給定的正則表達式模式如下^([a-zA-Z0-9 \\ - ^,] {11},)* [a-zA-Z0-9 \\ - ^,] { 0,11} $和它的工作......非常感謝。 – 2012-01-30 13:48:07

-1

試試這個正則表達式:

^([a-zA-Z...]{11},)*[a-zA-Z...]{0,11}$ 
+3

最後不應該是「{11}」和「{0,11}」嗎? – biziclop 2012-01-30 13:29:08

+0

這個正則表達式會匹配字符串「abc」,這是不正確的。 – Kent 2012-01-30 13:36:19

+0

即使它不工作,我也提供了代碼... – 2012-01-30 13:36:32

0

所以,如果我理解正確,你想檢查在一個特定的字符串中,每個第12個元素是逗號?如果是的話,那麼這個簡單的regex將工作:

String input = "qazwsxedcrf,1234567890 ,"; 
Pattern p = Pattern.compile("(.{11},)+"); 
Matcher m = p.matcher(input); 
System.out.println(m.matches()); 
0

我的問題的理解:

  • 檢查每12個字符,它必須是 「」。即使它是字符串的最後一個 字符。
  • 字符串應該包含至少12個字符,如果少了,不 匹配

所以

"abcd" - NOT Match 
"12345678901,xx" - not match 
"12345678901,10987654321" - not match 
"12345678901" - not match 
"12345678901,10987654321," match! 

我希望我理解正確的話。

則:

^(\w{11},)+$ 

應該工作。請注意'\ w'可以更改爲符合您的要求。

+0

不確定要求是否爲字符串長度必須是12個字符的倍數。如果不是,那麼我相信例子2意外地返回false。 – BryanH 2012-01-30 14:10:39

相關問題