正则表达式,用于捕获URL中的ID号

时间:2019-05-16 15:27:12

标签: php html regex preg-match regex-group

我想用preg_match捕获URL中的ID。

正则表达式:

/news.[a-z0-9A-Z_ -]*.?(\d+).?(?:page)?.?([0-9]+)?\.html

我想正确捕获网址(\ d +)吗?

URL

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谢谢爱玛

1 个答案:

答案 0 :(得分:0)

您可能想简化您的表达。例如,在这里我们可以简单地使用捕获组来将目标ID定位在URL中。也许这个表达式就足够了:

\/news\/([a-z-]+)([0-9]+)\.html

,如果需要,您还可以添加/减少其边界。例如,您可以添加任何其他字符,这些字符可能位于该组([a-z-]+)中的ID之前,然后您的表达式更改为:

\/news\/([a-z-\/=]+)([0-9]+)\.html

RegEx

如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。

enter image description here

RegEx电路

您还可以在jex.im中可视化您的表达式:

enter image description here

代码

$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"
  }
}