为什么这个正则表达式不匹配
Why does this regex not match
我正在构建一个正则表达式模式来验证我输入的字符串。
这是我必须包括的限制;
The letters a to z (upper and lowercase) (zero or many times)
o The numbers 0 to 9 (between zero and three times)
o The ampersand (&) character (zero or may times)
o The space character (zero or one time)
这是我在
上构建和测试的正则表达式
[a-zA-Z&]*|[0-9]{0,3}|[\s]?
String p1 = "[a-zA-Z\&]*|[0-9]{0,3}|[\s]?" ;
if (bankName.matches(p1) && bankName.length() >= 8) {
System.out.println("Yes");
}
else{
System.out.println("NO");
}
这是我正在测试的条目。
tXiPkaodan57yzrCxYjVT
String bankName = "tXiPkaodan57yzrCxYjVT" ;
在我正在测试的网站上,正则表达式不匹配,因为数字( 5 和 7 )开始并且在字母之间,但我已经在我的正则表达式模式中包含它应该能够包含任何数字范围从0-9 和 0-3 次
https://www.freeformatter.com/java-regex-tester.html#ad-output
我在
上测试过的网站
您的正则表达式中的条形 ('or') 具有最高优先级,因此,该正则表达式为:
如果输入恰好是以下之一则匹配:
- 0 个或多个字符全部匹配任何字母(无论大小写)或与号,
- 0 到 3 位数字之间的任意位置
- 0 或 1 space.
您的输入是 none 那些东西;它是这些东西的混合体。例如,输入 'a1a' 与您的正则表达式不匹配,因为,好吧,单步执行它: 'a' 强制正则表达式匹配器选择上面 3 个选项中的第一个,就是..它。现在没有回头路了。您的正则表达式将匹配 a,无法匹配 1,到此结束。
那么,你是如何解决的?不是坚持使用正则表达式;这不是解决这个问题的好方法。精确执行您要求的正则表达式非常复杂。
相反,为什么不循环遍历每个字符,并有 4 个计数器(spaces、数字、字母和其他东西)。对于每个字符,增加正确的计数器。然后最后检查'other stuff'计数器是否为0,digits是否为3以下,spaces是否为1以下,才有效。否则不是。
我正在构建一个正则表达式模式来验证我输入的字符串。 这是我必须包括的限制;
The letters a to z (upper and lowercase) (zero or many times)
o The numbers 0 to 9 (between zero and three times)
o The ampersand (&) character (zero or may times)
o The space character (zero or one time)
这是我在
上构建和测试的正则表达式[a-zA-Z&]*|[0-9]{0,3}|[\s]?
String p1 = "[a-zA-Z\&]*|[0-9]{0,3}|[\s]?" ;
if (bankName.matches(p1) && bankName.length() >= 8) {
System.out.println("Yes");
}
else{
System.out.println("NO");
}
这是我正在测试的条目。
tXiPkaodan57yzrCxYjVT
String bankName = "tXiPkaodan57yzrCxYjVT" ;
在我正在测试的网站上,正则表达式不匹配,因为数字( 5 和 7 )开始并且在字母之间,但我已经在我的正则表达式模式中包含它应该能够包含任何数字范围从0-9 和 0-3 次 https://www.freeformatter.com/java-regex-tester.html#ad-output 我在
上测试过的网站您的正则表达式中的条形 ('or') 具有最高优先级,因此,该正则表达式为:
如果输入恰好是以下之一则匹配:
- 0 个或多个字符全部匹配任何字母(无论大小写)或与号,
- 0 到 3 位数字之间的任意位置
- 0 或 1 space.
您的输入是 none 那些东西;它是这些东西的混合体。例如,输入 'a1a' 与您的正则表达式不匹配,因为,好吧,单步执行它: 'a' 强制正则表达式匹配器选择上面 3 个选项中的第一个,就是..它。现在没有回头路了。您的正则表达式将匹配 a,无法匹配 1,到此结束。
那么,你是如何解决的?不是坚持使用正则表达式;这不是解决这个问题的好方法。精确执行您要求的正则表达式非常复杂。
相反,为什么不循环遍历每个字符,并有 4 个计数器(spaces、数字、字母和其他东西)。对于每个字符,增加正确的计数器。然后最后检查'other stuff'计数器是否为0,digits是否为3以下,spaces是否为1以下,才有效。否则不是。