如何创建一个正则表达式来查找确切的字符串长度?

时间:2016-01-27 09:59:36

标签: java regex

遇到这些情况:

  • 12345678901234
  • 123456789012345
  • 1234567890123456
  • 12345678901234567

我需要找到具有15个字符长度的字符串。

到现在为止我制作了这段代码:

String pattern = "(([0-9]){15})";
Mathcer m = new Mathcer(pattern);
if (m.find()){
    System.out.println(m.group(1));
}

结果是这样的:

  • 12345678901234(未找到 GOOD
  • 123456789012345(发现 GOOD
  • 1234567890123456(发现不好
  • 12345678901234567(发现不好

我怎样才能创建一个正则表达式,它可以给我15个结果,就像我认为这个正则表达式可以给我的那样。超过15是不可接受的。

3 个答案:

答案 0 :(得分:8)

使用^$锚点标记字符串的开头和结尾:

String pattern = "^([0-9]{15})$";
  • ^匹配字符串
  • 开头的位置
  • $匹配字符串
  • 末尾的位置

如果没有这些锚点,您只需在字符串中的任何位置查找15个连续数字。匹配字符串可以另外包含更多数字(甚至包含字母),但仍然匹配。

(另外,你的内部括号是多余的 - 我已经删除它。如果你正在访问整个匹配的值而不是第一组捕获的值,你甚至可以发出其他括号:{ {1}})

Regex101 Demo

答案 1 :(得分:3)

只需在正则表达式中添加开头和结尾:

"^[0-9]{15}$"

^(([0-9]){15})$ 表示“字符串的开头”
^表示“字符串结束”

因此,字符串中只能有15个数字。

有关Java中的更多正则表达式运算符,请参阅Pattern documentation

答案 2 :(得分:2)

只需使用matches()代替'find()'