正则表达式匹配字符组

时间:2013-03-04 17:39:21

标签: regex preg-match

此正则表达式^.*.*.*.*.*.*00将使用preg_match为此数字10102001返回true。

我知道会捕获前七个数字,但如果最后一个数字不是0,那么结果应该是假的而不是真的。这就是我需要的。对于这个数字,正则表达式将按预期工作(假):10102011

10102001 -- true why?
10102011 -- false

正则表达式有什么问题?

4 个答案:

答案 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$