为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2021-04-28 06:04:49
我正在尝试识别仅包含一个整数的字符串。即恰好连续的数字,例如“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
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这是正则表达式:


^[^\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

      }         

}


查看完整回答
反对 回复 2021-05-26
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

Matcher.find()会尝试在字符串中找到匹配项。您应该尝试Matcher.matches()查看模式是否适合所有字符串。


这样,您需要的模式是 \d+


编辑:似乎我误解了这个问题。使用相同模式查找字符串是否只有一个整数的一种方法是:


int matchCounter = 0;

while (Matcher.find() || matchCounter < 2){

   matchCounter++;

}

return matchCounter == 1


查看完整回答
反对 回复 2021-05-26
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您可以使用RegEx ^\D*?(\d+)\D*?$

  • ^\D*? 确保行首与第一组之间没有数字

  • (\d+) 匹配您的数字

  • \D*?$ 确保您的第一组和行尾之间没有数字

演示

因此,对于您的Java字符串,应为: ^\\D*?(\\d+)\\D*?$


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信