CodeIgniter路由匹配带有可选小数的两个数字

时间:2013-11-29 06:20:52

标签: php regex codeigniter

尝试匹配以下内容:

wrs/time/5/10wrs/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 个答案:

答案 0 :(得分:1)

您当前的正则表达式有效,但将完整的数字放入第1组和第3组(第2组和第4组中也包含小数)。

您可以通过将重写更改为'wrs/trange/$1/$3'来解决此问题。

或者,您可以将您的正则表达式略微更改为:

wrs/time/(\d{0,2}(?:\.\d{1,2})?)/(\d{0,2}(?:\.\d{1,2})?)

通过将小数部分周围的(...)更改为(?:...),您说不会在自己的组中捕获小数,因此您的数字将与您期望的一样在第1组和第2组。

这通常很有用,因为在你的例子中你需要在括号中对某些东西进行分组,这样你就可以使用?使整个事物成为可选的,但你实际上并不希望那部分是一个捕获基。

RegExr