Java正则表达式?(expr){num}感到困惑吗?

我正在尝试识别仅包含一个整数的字符串。即恰好连续的数字,例如“1234”(没有点,没有逗号)一个串。


所以我认为应该这样做:(这与Java String Escapes一起使用):


(\\d+){1,}

因此,“ \ d +”正确是一串连续的数字。(正确的?)


我将此表达式作为子表达式包含在“(”和“)”中,然后试图说“这些子表达式中只有一个。


这是(matcher.find())检查各种字符串的结果:(请注意,此后的正则表达式在这里“原始”-不转义Java字符串)。


Pattern:(\d+){1,}

                  Input String                        Result

                             1                          true

                       XX-1234                          true

      do-not-match-no-integers                         false

         do-not-match-1234-567                          true

          do-not-match-123-456                          true

看来模式中的'1'适用于“ + \ d”字符串,而不是那些连续字符串的数目。


因为如果我将数字从1更改为4,我可以看到结果更改为以下内容:


Pattern:(\d+){4,}

                  Input String                        Result

                             1                         false

                       XX-1234                          true

      do-not-match-no-integers                         false

         do-not-match-1234-567                          true

          do-not-match-123-456                         false

我在这里想念什么?出于兴趣-如果我完全取消了“(”和“)”-我会再次得到不同的结果


Pattern:\d+{4,}

              Input String                        Result

                         1                          true

                   XX-1234                          true

  do-not-match-no-integers                         false

     do-not-match-1234-567                          true

      do-not-match-123-456                          true


紫衣仙女
浏览 206回答 3
3回答

白衣染霜花

这是正则表达式:^[^\d]*\d+[^\d]*$   这是零个或多个非数字,然后是数字的子字符串,然后又是零个或多个非数字,直到字符串结尾。这是Java代码(带有转义的斜杠):class MainClass {      public static void main(String[] args) {        String regex="^[^\\d]*\\d+[^\\d]*$";        System.out.println("1".matches(regex));  // true        System.out.println("XX-1234".matches(regex)); // true        System.out.println("XX-1234-YY".matches(regex)); // true        System.out.println("do-not-match-no-integers".matches(regex)); // false        System.out.println("do-not-match-1234-567".matches(regex)); // false        System.out.println("do-not-match-123-456".matches(regex)); // false      }         }

慕姐4208626

Matcher.find()会尝试在字符串中找到匹配项。您应该尝试Matcher.matches()查看模式是否适合所有字符串。这样,您需要的模式是 \d+编辑:似乎我误解了这个问题。使用相同模式查找字符串是否只有一个整数的一种方法是:int matchCounter = 0;while (Matcher.find() || matchCounter < 2){&nbsp; &nbsp;matchCounter++;}return matchCounter == 1

守着一只汪

您可以使用RegEx&nbsp;^\D*?(\d+)\D*?$^\D*?&nbsp;确保行首与第一组之间没有数字(\d+)&nbsp;匹配您的数字\D*?$&nbsp;确保您的第一组和行尾之间没有数字演示因此,对于您的Java字符串,应为:&nbsp;^\\D*?(\\d+)\\D*?$
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java