我正在尝试使用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?
答案 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”或其他任何东西。)