2014-08-28 36 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 
相关问题