1

我想匹配/(我相信您使用[^/]+$)的最后一个实例并复制接下来的四个或更少数字的内容,直到我得到一个 dash -

我相信返回这个数字的“正确”方法是通过 preg_split,但我不确定。我知道的唯一其他方法是展开/、数组反转、展开-、分配。我敢肯定还有更优雅的方式吗?

例如

example.com/12-something // get 12

example.com/996-something // get 996

example.com/12345-no-deal // return nothing 

不幸的是,我不像你们中的一些人那样是正则表达式大师。

这是做同样事情的一种丑陋方式。

$strip = array_reverse(explode('/', $page));

$strip = $strip[0];

$strip = explode('-', $strip);

$strip = $strip[0];

echo (strlen($strip) < 4) ? (int)$strip : null; 
4

2 回答 2

1

匹配/\/(\d{1,4})-[^\/]+$/项应符合第一个捕获变量中的数字。抱歉,我不写 PHP,也不想处理preg_match's 的界面,但无论如何这就是正则表达式。

如果这些天 PHP 支持非斜线正则表达式分隔符,m#/(\d{1,4})-[^/]+$#那么是倾斜牙签较少的版本。

于 2011-08-12T19:08:49.263 回答
1

这应该工作

    $str = "example.com/123-test";
    preg_match("/\/([\d]{1,4})-[^\/]+$/", $str, $matches);
    echo $matches[1]; // 123

它确保该###-word部分位于末尾并且只有 1-4 位数字。

于 2011-08-12T19:11:16.307 回答