我刚刚完成学习正则表达式,我想我应该把它变成有用的东西,所以我创建了PHP的小URL路由脚本和下面的正则表达式:困惑正则表达式中的URL路由脚本行为
^(?:/(\w+)?)*$
(php代码目前不做任何事情,只是打印出preg_match中的匹配组) 当前如果给定url /foobar/foo/bar
,匹配组是整个字符串(正常行为)和url的最后部分这种情况下:bar
)。
显然,这是一个问题。
我认为这是由于使用1个捕获组而导致的,它只捕获最后一个匹配的字符串,但我不确定。任何意见,真正的原因和/或解决方案,将不胜感激。
在此先感谢!
再来,究竟是什么问题呢?你想要捕捉什么?你的正则表达式看起来相当危险,嵌套的“是,但是,不,但”重复操作符(它是Vicky Pollard正则表达式!),但没有关于你想匹配什么的更多信息,也不清楚如何改进它。 – tripleee
@tripleee我希望每个组都会被记住,并且不会在每场比赛中被覆盖(但根据Tim的回答,这是不可能的)。正则表达式非常“危险”,因为我希望能够在没有对代码进行任何检查的情况下向他抛出一个URL,所以我让正则表达式执行代码将做的事情(剥离斜线,匹配空路径等)。 )。 – GZaidman