php删除字符串中的所有内容,保留最后的数字

时间:2011-02-04 19:02:52

标签: php regex

我的价值如下:

$var1 = car-123-244343
$var2 = boat-2-1
$var3 = plane-311-23

我需要删除所有内容并在第二个连字符后保留最后一位数/ ditgits

期待值:

244343
1
23

这就是我所拥有的

$stripped = preg_replace('^[a-z]+[-]$', '', 'car-123-244343');

我收到一个大红色错误没有结束分隔符'^'找到

5 个答案:

答案 0 :(得分:4)

没有正则表达式:

$var1 = substr($var1, strrpos($var1, '-') + 1);

这与以下内容相同:

  1. $pos = strrpos($var1, '-') + 1占据'-'的最后一个位置,并添加1以便从下一个字符开始
  2. substr($var, $pos)获取$var并返回从$pos开始的子字符串。
  3. 我认为比使用正则表达式便宜。

    修改

    正如konforce所指出的那样,如果您不确定所有字符串都具有该格式,则必须对其进行验证。

答案 1 :(得分:2)

首先,该错误意味着您的正则表达式需要包含在delimiters中(下面我使用经典/)。

其次,我会改写你的正则表达式:

$stripped = preg_replace('/.+?(\d+)$/', '$1', 'car-123-244343');

如果您可以对假设进行操作,那么在最后-之后的内容始终是一个数字,其他解决方案也可以。

答案 2 :(得分:2)

此功能将起作用:

function foo($value)
{
    $split = explode('-', $value);
    return $split[count($split)-1];
}

答案 3 :(得分:2)

这是一个有趣的爆炸版本:

list($vehicle, $no1, $no2) = explode('-', $data);

答案 4 :(得分:1)

使用正则表达式:

$endnumber = preg_replace('/.*[^0-9]/', '', $input);

删除所有内容,包括最后一位非数字。