Regex CakePHP正则表达式的悲哀
我对CakePHP中的路由有一个简单的正则表达式要求,这给我带来了麻烦 路由代码:Regex CakePHP正则表达式的悲哀,regex,cakephp,Regex,Cakephp,我对CakePHP中的路由有一个简单的正则表达式要求,这给我带来了麻烦 路由代码: Router::connect('/tees/:id', array('controller' => 'tees', 'action' => 'view'), array('id' => "^.*[0-9].*[-][a-z].*$")); regex: "^.*[0-9].*[-][a-z].*$" 匹配案例:340764测试三通 失败案例:测试 失败案例:anysingleword 你知
Router::connect('/tees/:id', array('controller' => 'tees', 'action' => 'view'), array('id' => "^.*[0-9].*[-][a-z].*$"));
regex: "^.*[0-9].*[-][a-z].*$"
匹配案例:340764测试三通
失败案例:测试
失败案例:anysingleword
你知道我做错了什么吗
谢谢大家!
编辑:
我最终使用的解决方案如下:
".*[0-9].*[a-z-].*"
根据正则表达式语法,您要求每个匹配项都包含一个“-”字符(正则表达式中的[-]),因此任何没有“-”的单词都不会匹配。
如果您打算这样做,那么[-]不是通常的方式,请使用\- 如果您不希望始终匹配“-”,可能希望将其添加到[a-z]中,那么正确的语法是:
^.*[0-9].*[a-z-].*$
但请注意,[a-z-]将只匹配一个字符,这可能是您的意思
^.*[0-9].*[a-z-]*$
或
您必须给出匹配大小写的详细格式,否则,编写正则表达式非常困难。不幸的是,所有这些都不起作用:(连字符实际上是这里的关键,但我典型的匹配格式是“[numbers]-[alpha]”字符串将始终以一组数字作为前缀。但是,数字后面可能有许多阿尔法。我最终删除了插入符号和美元符号,这非常有效。谢谢!
*[0-9].[a-z-].
您的正则表达式包含“*”开始时,意思是:任何东西都可以在数字之前出现。:::所以数字只出现一次,在开始时?使用这个正则表达式然后^\d+(\-[a-z]+)*$如果我理解正确,最后一个正则表达式会更好。当前输入45566-----将匹配。(除非您希望这样)
^.*[0-9]*[a-z-]*$