Php 删除除最后一个带破折号的变量外的所有字符和数字

Php 删除除最后一个带破折号的变量外的所有字符和数字,php,preg-replace,Php,Preg Replace,嗨,我想在php中使用preg_replace删除一个字符,所以我这里有一段代码,我想删除整个字符、字母和数字,除了最后一个数字,它后面有破折号(-)符号和数字,所以这是我的代码 echo preg_替换('/(.+)(?=-[0-9])|(.+)/','','asdf1245-10') 我希望结果会很好 -10 上面的问题不是很好。我用它检查了这个模式,它看起来很有效,但在另一边根本不起作用。我不知道为什么,但有谁能帮我弄明白吗 非常感谢在这种情况下,我的第一个想法是使用explode。。让它

嗨,我想在php中使用preg_replace删除一个字符,所以我这里有一段代码,我想删除整个字符、字母和数字,除了最后一个数字,它后面有破折号(-)符号和数字,所以这是我的代码

echo preg_替换('/(.+)(?=-[0-9])|(.+)/','','asdf1245-10')

我希望结果会很好

-10

上面的问题不是很好。我用它检查了这个模式,它看起来很有效,但在另一边根本不起作用。我不知道为什么,但有谁能帮我弄明白吗


非常感谢

在这种情况下,我的第一个想法是使用explode。。让它像下面的代码一样简单

$string = 'asdf1245-10';
$array = explode('-', $string);
end($array);
$key = key($array);
$result = '-' . $array[$key];
$result=>“-10”

这里有一条路要走:

echo preg_replace('/^.+?(-[0-9]+)?$/','$1','asdf1245-10');
输出:

-10
<nothing>

输出:

-10
<nothing>

另一种方式:

$result = preg_match('~\A.*\K-\d+\z~', $str, $m) ? $m[0] : '';
图案详情:

\A     # start of the string anchor
.*     # zero or more characters
\K     # discard all on the left from match result
-\d+   # the dash and the digits
\z     # end of the string anchor

@user1256346:
$1
代表第1组的内容,这是第一对括号内的内容。@toto我想对你的答案投赞成票,但我发现它更像一个陈述:-x