【问题标题】:java regular expression examples for match without length limitation无长度限制匹配的java正则表达式示例
【发布时间】:2015-01-31 17:02:52
【问题描述】:

我试图编写一个正则表达式来匹配以字母“G”开头的字符串,第二个索引应该是任何数字(0-9),字符串的其余部分可以包含任何内容并且可以是任何长度, 我被困在下面的代码中

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”

【问题讨论】:

    标签: java regex expression limit


    【解决方案1】:
    G - the letter G
    [0-9] - a digit
    .* - any sequence of characters
    

    所以表达

    G[0-9].*
    

    将匹配字母 G 后跟数字后跟任意字符序列。

    【讨论】:

      【解决方案2】:

      当你写\d时,它已经意味着[0-9]

      所以当你说 \d[0-9] 时,这意味着两个数字

      更好的使用:

      ^G\\d*
      

      这将匹配所有以 G 开头并具有零个或多个数字的单词

      【讨论】:

        【解决方案3】:
        "^[G]\\d[0-9]"
        

        此正则表达式匹配“G”,后跟 \\d,然后是另一个数字。

        使用以下之一:

        • "^G\\d"
        • "^G[0-9]"

        另外请注意,您不需要字符类,因为它只包含一个字母,所以它是多余的。

        【讨论】:

          【解决方案4】:

          试试这个正则表达式.* 将匹配数字后的任何字符

          ^G\\d.*
          

          http://regex101.com/r/uE4tX1/1

          【讨论】:

            【解决方案5】:

            为什么不匹配3索引“G8756942”

            因为您匹配以G 开头的字符串,后跟\d 和一个数字。解决方案:

            ^[G]\d
            

            【讨论】:

              【解决方案6】:

              这个正则表达式很好。

              "G\\d.*"
              

              因为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
              

              【讨论】:

                猜你喜欢
                • 2016-04-02
                • 2017-12-28
                • 2012-07-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-01-09
                相关资源
                最近更新 更多