我想用preg_match
捕获URL中的ID。
/news.[a-z0-9A-Z_ -]*.?(\d+).?(?:page)?.?([0-9]+)?\.html
我想正确捕获网址(\ d +)吗?
http://localhost/news/content-287.html
==> preg_match抓住了这个:
Array:
0 => string '/news/content-287.html' (length=22)
1 => string '7' (length=1)
如何解决此问题?
编辑:
理想情况下,我想要一个可以这样的网址:
/news/title-is/page=2.html并获取标题ID和页码...
:D谢谢爱玛
答案 0 :(得分:0)
您可能想简化您的表达。例如,在这里我们可以简单地使用捕获组来将目标ID定位在URL中。也许这个表达式就足够了:
\/news\/([a-z-]+)([0-9]+)\.html
,如果需要,您还可以添加/减少其边界。例如,您可以添加任何其他字符,这些字符可能位于该组([a-z-]+)
中的ID之前,然后您的表达式更改为:
\/news\/([a-z-\/=]+)([0-9]+)\.html
如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。
您还可以在jex.im中可视化您的表达式:
$pattern = '/\/news\/([a-z-\/=\?]+)([0-9]+)\.html/is';
$subject = 'http://localhost/news/content/title-id/id=287.html';
preg_match_all($pattern, $subject, $matches);
var_dump($matches);
array(3) {
[0]=>
array(1) {
[0]=>
string(34) "/news/content/title-id/id=287.html"
}
[1]=>
array(1) {
[0]=>
string(20) "content/title-id/id="
}
[2]=>
array(1) {
[0]=>
string(3) "287"
}
}