我正在尝试从我的代码下面的网址中提取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
答案 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];