文本和第一次出现之间的PHP preg_match -

时间:2011-02-07 20:01:18

标签: php preg-match

我正在尝试使用preg_match从以下网址中获取12345。

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html";

$beg = "http://www.somesite.com/directory/";
$close = "\-";
preg_match("($beg(.*)$close)", $url, $matches);

我尝试了多种组合。 *? \ B'/ P>

有没有人知道如何使用preg_match从网址中提取12345?

3 个答案:

答案 0 :(得分:3)

有两件事,首先,你需要preg_quote,你还需要分隔符。使用你的构造方法:

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html";

$beg = preg_quote("http://www.somesite.com/directory/", '/');
$close = preg_quote("-", '/');
preg_match("/($beg(.*?)$close)/", $url, $matches);

但是,我会稍微改写一下查询:

preg_match('/directory\/(\d+)-/i', $url, $match);

它只匹配目录部分,更具可读性,并确保只返回数字(无字符串)

答案 1 :(得分:1)

这不使用preg_match但会实现相同的操作并且执行速度更快:

$url = "http://www.somesite.com/directory/12345-this-is-the-rest-of-the-url.html";

$url_segments = explode("/", $url);
$last_segment = array_pop($url_segments);

list($id) = explode("-", $last_segment);

echo $id; // Prints 12345

答案 2 :(得分:0)

太慢了,我是^^。 好吧,如果你没有停留在preg_match上,这是一个快速可读的选择:

$num = (int)substr($url, strlen($beg));

(看看你的代码我猜,你要找的数字是一个数字ID,这是典型的网址看起来像这样,不会是“12abc”或其他任何东西。)