从网址中提取ID

时间:2018-06-01 18:22:28

标签: php regex

我正在尝试从我的代码下面的网址中提取ID:

$ ruby -v
/bin/sh: eval: line 60: ruby: not found

我想只回显

$text = '/news/35555555555-title-of-the-article';
$text = eregi("news/(.*)-",$text,$regs); 
echo $regs[1];

但上面的代码是打印:

35555555555

2 个答案:

答案 0 :(得分:2)

您必须使用排除连字符的字符类,而不是匹配任何字符的点。 ereg*函数使用POSIX语法,并且没有非贪婪的量词:

$text = '/news/35555555555-title-of-the-article';
$text = eregi("news/([^-]*)-",$text,$regs); 
echo $regs[1];

请注意,自{php} 5.3以来,ereg*函数已被弃用,并在包含5.6版本之前发出警告。它们已从php 7.0中删除并产生致命错误。但是,mb_ereg*函数始终可用。另请注意,自2011年1月起不再支持php 5.2(换句话说,您必须升级您的php版本)。

相反,使用使用回溯引擎的preg_*函数具有类似Perl的语法(特别是非贪婪量词):

$text = '/news/35555555555-title-of-the-article';
preg_match('~/news/(.*?)-~', $text, $m);
echo $m[1];

如果没有正则表达式,您可以使用格式化字符串:

$text = '/news/35555555555-title-of-the-article';
list ($id) = sscanf(strtolower($text), '/news/%[^-]-');
echo $id;

或更常见的字符串函数:

$text = '/news/035555555555-title-of-the-article';
list($id,) = explode('-', substr(strrchr($text, '/'), 1)); 
echo $id;

答案 1 :(得分:1)

肮脏但简单的方法是

$text = '/news/35555555555-title-of-the-article';
$parts = end(explode('/', $text));
$param = explode('-', $parts);
echo $param[0];