Php CodeIgniter路由匹配两个带可选小数的数字
尝试匹配以下内容:Php CodeIgniter路由匹配两个带可选小数的数字,php,regex,codeigniter,Php,Regex,Codeigniter,尝试匹配以下内容: wrs/time/5/10或wrs/time/5.2/10.55或介于整数和浮点之间的任何内容,对于两个捕获组,最多可选择两位小数 已尝试以下对一个数字有效但对两个组无效的方法:\d{0,2}(\.\d{1,2})? 完整路由尝试: $route['wrs/time/(\d{0,2}(\.\d{1,2})?)/(\d{0,2}(\.\d{1,2})?)'] = 'wrs/trange/$1/$2'; 非常感谢您的任何帮助您当前的正则表达式有效,但将完整的数字分为第1组和第3
wrs/time/5/10
或wrs/time/5.2/10.55
或介于整数和浮点之间的任何内容,对于两个捕获组,最多可选择两位小数
已尝试以下对一个数字有效但对两个组无效的方法:\d{0,2}(\.\d{1,2})?
完整路由尝试:
$route['wrs/time/(\d{0,2}(\.\d{1,2})?)/(\d{0,2}(\.\d{1,2})?)'] = 'wrs/trange/$1/$2';
非常感谢您的任何帮助您当前的正则表达式有效,但将完整的数字分为第1组和第3组(第2组和第4组中的小数也独立存在) 您可以通过将重写更改为
'wrs/trange/$1/$3'
来解决此问题
或者,您可以将正则表达式稍微更改为:
wrs/time/(\d{0,2}(?:\.\d{1,2})?)/(\d{0,2}(?:\.\d{1,2})?)
通过将小数部分周围的(…)
更改为(?:…)
,您可以说不要在其自己的组中捕获小数,这样您的数字将像您预期的那样位于组1和组2中
在您的示例中,当您需要将某些内容分组到括号中,以便使用?
使整个内容成为可选内容时,这通常非常有用,但实际上您并不希望该部分成为捕获组
您能用您得到的信息编辑问题吗?你期望什么呢?当我在我的一个项目中测试你的代码时,它运行得很好。
{0,2}+
不是指“在0到2次之间,一次或多次”而是“在0到2次之间,所有格”。是的,当我键入它时,我意识到我不知道{0,2}+
实际上会这样做-我非常确定它是无效的正则表达式。我不知道有些东西可能是“占有性的”(编写正则表达式的人也不知道),只是现在查了一下,谢谢你提供的信息。