我有一个简单的RegEx,它应该寻找8位数字:
String number = scanner.findInLine("\\d{8}");
但事实证明,它也匹配9位及更多位数。 如何修复此RegEx以匹配8位数?
例如:12345678应匹配,而 1234567和123456789不应该。
答案 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位数后不要添加任何内容。