我试图验证3个数字后面跟着/然后5个数字的字符串我认为这将工作
(/^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])/i)
但是它不知道我做错了什么
试试这个
preg_match('@^'d{3}/'d{5}@', $string)
不工作的原因是由于+
符号匹配指定字符或字符类的"一个或多个"。
另外,当使用正斜杠分隔符(表达式开头和结尾的字符)时,需要用反斜杠作为前缀来转义模式中的正斜杠,例如
/foo'/bar/
PHP允许您使用替代分隔符(如我的答案),如果您的表达式包含许多正斜杠,这很方便。
首先,您使用/
作为regexp分隔符,因此如果不使用反斜杠进行转义,就不能在模式中使用它。否则,PHP会认为你的模式在中间的/
处结束(你可以看到,即使是StackOverflow的语法高亮也会这样认为)。
第二,+
是"贪婪的",它会匹配尽可能多的字符,所以第一个[0-9]+
会一次匹配前3个数字,不给后面两个数字留下任何匹配。
第三,没有必要使用i
,因为你正在处理的数字不是大写或小写,所以大小写敏感是一个没有意义的问题。
试试这个
/^'d{3}'/'d{5}$/
'd
是[0-9]
的简写,{3}
和{5}
分别表示重复3次或5次。
(此模式固定在字符串的开始和结束。你的模式只锚定在开始,如果这是故意的,从我的模式中删除$
)
我最近发现这个网站对调试正则表达式很有用:http://www.regextester.com/index2.html
它假设使用/.../
(这意味着您不应该在粘贴的正则表达式中包含这些斜杠)。
所以,在我把你的正则表达式^([0-9]+[0-9]+[0-9]+/[0-9]+[0-9]+[0-9]+[0-9]+[0-9])
在正则表达式框和123/45678
在测试框中,我看到没有匹配。当我在中间的正斜杠前面放一个反斜杠时,它就能识别出匹配。然后您可以尝试匹配1234/567890
并发现它仍然匹配。然后您遍历并删除所有加号,然后它就会正确地停止匹配。
我特别喜欢这个网站的地方是它用红色显示部分匹配的方式,让您可以看到您的正则表达式在哪里工作。