我的价值如下:
$var1 = car-123-244343
$var2 = boat-2-1
$var3 = plane-311-23
我需要删除所有内容并在第二个连字符后保留最后一位数/ ditgits
期待值:
244343
1
23
这就是我所拥有的
$stripped = preg_replace('^[a-z]+[-]$', '', 'car-123-244343');
我收到一个大红色错误没有结束分隔符'^'找到
答案 0 :(得分:4)
没有正则表达式:
$var1 = substr($var1, strrpos($var1, '-') + 1);
这与以下内容相同:
$pos = strrpos($var1, '-') + 1
占据'-'
的最后一个位置,并添加1
以便从下一个字符开始substr($var, $pos)
获取$var
并返回从$pos
开始的子字符串。我认为比使用正则表达式便宜。
修改强>
正如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);
删除所有内容,包括最后一位非数字。