此正则表达式^.*.*.*.*.*.*00
将使用preg_match为此数字10102001
返回true。
我知道会捕获前七个数字,但如果最后一个数字不是0,那么结果应该是假的而不是真的。这就是我需要的。对于这个数字,正则表达式将按预期工作(假):10102011
10102001 -- true why?
10102011 -- false
正则表达式有什么问题?
答案 0 :(得分:4)
.*
将匹配任何不是换行符的字符的零或更多。你的正则表达式实际上只相当于写^.*00
。它匹配,因为“10102001”中有子串“1010200”。
您需要以下内容:^.{6}00
(与^......00
相同)来为您提供所需内容。更好的是,您可能希望更具体,并指定您只需要数字前缀。所以^[0-9]{6}00
。如果你要确保最后的0位于行或目标字符串的最后,那么添加$。 ^.{6}00$
答案 1 :(得分:2)
10102001 - 为什么?
因为你没有匹配到字符串的结尾,所以正则表达式将在结束之前匹配00 某处的任何内容(任何东西都可以跟随零)。此外,*
表示“零或更多”,这意味着.*
匹配任何内容 - 空字符串,十个字符,四个字符,一个字符......
这是一个正则表达式,它捕获以7个字符开头并以两个零结尾的所有内容(总共9个字符):
^.......00$
答案 2 :(得分:1)
你的正则表达式是各种搞砸了。最后5 .*
是毫无意义的,^.*00
会做同样的事情。
10102001
是正确的,因为它匹配其子字符串1010200
。它离开1结束了。如果要检查它是否与整个字符串匹配,请使用:^.*00$
。
这是你的正则表达式正在做什么。最后添加$
以查看它应该如何工作。
http://www.regex101.com/r/wK3qI1
我不能就你的正则表达式应该如何做出任何建议,因为你没有发布任何约束。
答案 3 :(得分:0)
这对你来说应该是正确的正则表达式:
[0-9]{7}0$