我正在编写一个简单的URL解析器。 正如下面的正则表达式
preg_match_all('/^test\/(\w+)\/?$/', $url, $matches);
我可以抓住所有网址
test/5
并浏览$ matches数组我可以获得ID,即5。那没关系。
使用如下的正则表达式
preg_match_all('/^test\/((\w+)\/?)+\/(\w+)\/?$/', $url, $matches);
我可以抓住所有网址
test/1/5
test/1/2/5
test/1/2/3/5
......等等。
问题是浏览$matches
数组我无法捕获可变长度部分的所有匹配ID(((\w+)\/?)+)
。我的意思是我没有捕获1,2,3但是3, 3,3。我得到最后一次ID重复N次。
我错过了什么?
答案 0 :(得分:0)
我会分两步完成这项工作。
首先,您可以检查网址格式:
^test(?:\/\d+)+$
然后,如果测试成功,您可以使用此正则表达式提取ID:
(?:\G|^test)\/\K\d+
输出数组只包含ID See the demo
(?:\G|^test)
匹配字符串开头的上一场比赛或 test
的结束位置\/
与/
\K
重置当前比赛的起点,此处不包括结果中的/
\d+
匹配1位或更多位数