完全匹配8位数的Java RegEx

时间:2016-01-21 13:31:30

标签: java regex

我有一个简单的RegEx,它应该寻找8位数字:

String number = scanner.findInLine("\\d{8}");

但事实证明,它也匹配9位及更多位数。 如何修复此RegEx以匹配8位数?

例如:12345678应匹配,而 1234567和123456789不应该。

3 个答案:

答案 0 :(得分:6)

您的正则表达式将匹配字符串中任意位置的8位数字,即使这8位数字后面还有其他数字。

要匹配8个未连接数字的连续数字,您需要使用 lookarounds

String reg = "(?<!\\d)\\d{8}(?!\\d)";

请参阅regex demo

<强>解释

  • (?<!\d) - 如果8位数字之前有数字,则会导致匹配失败的负面反馈
  • \d{8} 8位数字
  • (?!\d) - 如果8个数字与\d{8}子模式匹配后有一个数字,则表示匹配失败的否定前瞻。

答案 1 :(得分:4)

试试这个:

\b 被称为字边界,它会对你的正则表达式说明数字在8之后结束

String number = scanner.findInLine("\\b\\d{8}\\b");

答案 2 :(得分:0)

我认为这很简单并且有效:

if (empty($_SESSION['token'])) {
  // Output an error message, or take a specific action to handle this case.
  return;
}
  • String regEx = "^[0-9]{8}$"; - 以数字开头

  • ^ - 仅使用数字(您也可以使用[0-9]

  • \d - 使用8位

  • {8} - 在此结束。 8位数后不要添加任何内容。