美国的邮政编码的规则是 5 个数字或者 5 个数字连上 4 个数字,如 12345 或者 54321-1234 ,如果要匹配所有的邮编,则正确的正则表达式为: d{5}-d{4}|d{5} //错误写法 d{5}|d{5}-d{4} 下面的错误写法,只能匹配到 5 位数字及 9 位数字的前 5 位数字的情况,而不能匹配 9 位数字的邮编。
为什么下面那种写法就是错的,如果是9位数的邮编,和上面那个写法有什么不同吗?
我试了一下
12345-6789 12345-6789 这个文本 你(d{5})|(d{5}-d{4})和(d{5}-d{4})|(d{5})的结果不一样 (d{5})|(d{5}-d{4})只能匹配到12345 (d{5}-d{4})|(d{5})只能匹配到12345-6789 这说明这个或运算的时候 从左往右计算 计算得到匹配结果就完事了 不会去试另一个了 但是如果用下面这个文本 12345-6789 12345 你就会发现(d{5}-d{4})|(d{5})都能匹配到 但是(d{5})|(d{5}-d{4})只能匹配到12345 道理和上面的一样 从左到有 匹配完就结束 不会继续试后面的了
1.2m questions
2.1m answers
5 comments
56.5k users