我刚刚学习了正则表达式,我认为我应该把它放到有用的东西中,所以我用php和以下正则表达式创建了一个小的url路由脚本:
^(?:/(\w+)?)*$
(php代码目前没有做任何事情,只是打印出preg_match中的匹配组)
目前,如果给出了网址/foobar/foo/bar
,则匹配的组是整个字符串(正常行为)和网址的最后一部分(在这种情况下:bar
)。
显然,这是一个问题。
我认为这是因为使用了1个捕获组,它只捕获最后一个匹配的字符串,但我不确定。任何有关此事的真正原因和/或解决方案的建议将不胜感激。
提前致谢!
答案 0 :(得分:1)
您已正确诊断出问题 - 在每次重复周围群组时,新匹配会“覆盖”先前匹配的捕获群组内容。
目前还不太清楚你预期会发生什么。我想你会喜欢这条路的每一部分都被“记住”作为自己的团队?对于PHP中的重复组,您无法做到这一点(只有少数正则表达式方言(Perl 6和.NET)允许这样的事情。)
在您的情况下,通过使用正则表达式验证URL然后将其拆分为斜杠,您可能会更好:
$result = preg_split('%/%', $subject);