【问题标题】:Regex Java Total String Length正则表达式 Java 总字符串长度
【发布时间】:2014-10-22 01:39:15
【问题描述】:

我需要以下正则表达式来仅选择总大小为 X 的那些:

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

编辑:

例如6:

  • JJPNNN -> JJPNNN
  • ONNJNNNO -> NNJNNN
  • NPJNJNN -> NPJNJN, PJNJNN
  • NPJNN -> 错误

我需要它来捕获小组。

【问题讨论】:

  • 这行得通吗? ([[JN]*P?[JN]*]N){6}?
  • @BuhakeSindi 不,不会。这将重复整个模式 6 次...

标签: java regex expression limit


【解决方案1】:

你可以使用大小限制

\{5,10}

类似的东西限制大小为 5~10

你应该看看它,关于这个话题有很多回答的问题

【讨论】:

    【解决方案2】:

    你可以先用lookahead来检查长度,像这样:

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

    另外,你的括号似乎太多了。要使表达式与您的示例匹配,您需要删除最外面的表达式:

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

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

    【讨论】:

      【解决方案3】:
      String test = "123456"
      if(test.match("^\w{6,6}$")
      {
        //True if String has length of 6
      }   
      

      【讨论】:

      • OP 想要一个正则表达式,如果它符合 [JN]*P?[JN]*]N 的模式,则返回 true 并且的长度为 6。不是一个或另一个。
      【解决方案4】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-04
        • 1970-01-01
        • 2014-04-23
        • 2016-03-03
        • 2014-05-12
        • 1970-01-01
        • 2014-08-04
        • 2015-04-02
        相关资源
        最近更新 更多