2014-08-28 67 views
1

我需要下面的正則表達式只選擇那些總規模的X:正則表達式的Java總字符串長度

[[JN]*P?[JN]*]N 

編輯:

例如6:

  • JJPNNN - > JJPNNN
  • ONNJNNNO - > NNJNNN
  • NPJNJNN - > NPJNJN,PJNJNN
  • NPJNN - >假

我需要它來捕捉組。

+0

將這項工作? '([[JN] * P?[JN] *] N){6}'? – 2014-08-28 08:54:38

+0

可能的重複[regexp最大長度限制](http://stackoverflow.com/questions/6503177/regexp-maximal-length-restrict) – 2014-08-28 08:56:34

+0

@BuhakeSindi不,它不會。這將重複整個模式6次... – bcsb1001 2014-08-28 09:00:54

回答

0

您可以使用的大小限制

\{5,10} 

類似的東西限制大小爲5〜10

你應該看一下就可以了,還有噸關於這個話題

1
回答問題

您可以使用lookahead首先檢查長度,如下所示:

(?=^.{6}$)[[JN]*P?[JN]*]N 

另外,你似乎有太多的括號。爲了使表達式匹配您的例子,你需要刪除的最外層:

(?=^.{6}$)[JN]*P?[JN]*N 

Here是使用ideone一個小的演示。

+0

你可以幫助編輯的要求嗎? – 2014-08-29 01:58:45

0
String test = "123456" 
if(test.match("^\w{6,6}$") 
{ 
    //True if String has length of 6 
} 
+0

OP想要一個正則表達式,如果它符合'[JN] * P?[JN] *] N ** **和**長度爲6的模式將返回true。不是一個或另一個。 – bcsb1001 2014-08-28 09:04:14

0
public class Main { 


    private static boolean match(String line) { 
     Pattern p = Pattern.compile("^(?=[JNP]{6}$)[JN]*P?[JN]*N$"); 
     Matcher m = p.matcher(line); 
     return m.matches(); 
    } 

    public static void main(String[] args) { 

     System.out.println(match("JJPN")); 
     System.out.println(match("JJPNNN")); 
     System.out.println(match("NNJNNN")); 
     System.out.println(match("NPJNJNN")); 
     System.out.println(match("NPJNJNNNN")); 

    } 
} 

false 
true 
true 
false 
false 
相關問題