Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
435 views
in Technique[技术] by (71.8m points)

php正则表达式邮编匹配问题?

美国的邮政编码的规则是 5 个数字或者 5 个数字连上 4 个数字,如 12345 或者 54321-1234 ,如果要匹配所有的邮编,则正确的正则表达式为:
d{5}-d{4}|d{5}
//错误写法
d{5}|d{5}-d{4}
下面的错误写法,只能匹配到 5 位数字及 9 位数字的前 5 位数字的情况,而不能匹配 9 位数字的邮编。

为什么下面那种写法就是错的,如果是9位数的邮编,和上面那个写法有什么不同吗?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

我试了一下

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
道理和上面的一样 从左到有 匹配完就结束 不会继续试后面的了



与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...