【问题标题】:How to use Regex look behind?后面怎么用Regex看?
【发布时间】:2012-01-12 23:46:12
【问题描述】:

我有以下 URL:www.exampe.com/id/1234,我想要一个获取 id 参数值的正则表达式,在本例中为 1234

我试过了

<?php
$url = "www.exampe.com/id/1234";
preg_match("/\d+(?<=id\/[\d])/",$url,$matches);
print_r($matches);
?>

得到Array ( [0] =&gt; 1 ),它只显示第一个数字。

问题是,我如何重写正则表达式以使用正向查找来获取所有数字?

【问题讨论】:

  • 你为什么要看后面?
  • 我试图解决一个更复杂的问题,并使用此示例使其变得简单。

标签: php regex


【解决方案1】:

为什么不只是preg_match('(id/(\d+))', $url, $matches) 而没有任何后视?结果将在$matches[1]

顺便说一句,正确的lookbehind表达式应该是((?&lt;=id/)\d+),但除非你需要,否则你真的不应该使用lookbehind。

另一种选择是(id/\K\d+)\K 重置比赛开始,通常用作更强大的后视)。

【讨论】:

  • 非常感谢。我主要关心的是弄清楚为什么后面的外观不起作用。我不熟悉\K,但我会调查一下。
【解决方案2】:

我同意 NikiC 的观点,即您不需要使用lookbehind;但是既然你问了——你可以写

<?php
$url = "www.exampe.com/id/1234";
preg_match("/(?<=id\/)\d+/",$url,$matches);
print_r($matches);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2023-03-03
    • 1970-01-01
    • 2021-04-02
    • 2019-10-09
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多