Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex CakePHP正则表达式的悲哀_Regex_Cakephp - Fatal编程技术网

Regex 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 你知

我对CakePHP中的路由有一个简单的正则表达式要求,这给我带来了麻烦

路由代码:

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-]*$