从字符串中获取最后一个数字的正则表达式

4

大家好
如果字符串语法如下,我该如何从字符串中获取数字(正整数):

t_def_type_id_2
t_def_type_id_22
t_def_type_id_334

因此,在第一个字符串中,我想要获取1,在第二个字符串中,我想要获取22,在第三个字符串中,我想要获取334,使用preg_match_all或任何其他适合的php函数。

10个回答

5
您可以使用正则表达式。
\d+$

使用preg_match函数


2
如果字符串中只有一个数字,只需使用 \d+

1
这将匹配0个或多个数字。更可能你想要\d+。 - Cfreak

2

试试这个:

preg_match('/^\w+(\d+)$/U', $string, $match);
$value = (int) $match[1];

1
@ian的答案一样,这只会捕获最后一个数字。\w+将首先吞掉整个字符串,然后每次向后退一位,直到满足正则表达式的其余部分。由于(\d+)只需要匹配一个数字,所以它只能得到一个数字。 - Alan Moore
好的观点。非贪婪匹配应该可以解决问题。我已经更新了我的答案。 - Sander Marechal

1

您可以使用

str_replace('t_def_type_id_','');

1

以下是代码:

^[\d]+(\d+)$


0
你可以使用 preg_replace()
$defTypeID = preg_replace("/^(.*?)(\d+)$/", "$2", $defTypeIDString);

0
$string = "t_def_type_id_2
t_def_type_id_22
t_def_type_id_334"; 

preg_match_all("#t_def_type_id_([0-9]+)#is", $string, $matches);

$matches = $matches[1];
print_r($matches);

结果:

Array
(
    [0] => 2
    [1] => 22
    [2] => 334
)

0

这是我的另一种解决方案。

$number = array_pop(explode('_', $string));

0
如果它总是出现在你的字符串的最后一个位置,那么使用一个平凡的字符串函数方法是可行的,并且看起来更加紧凑:
$num = ltrim(strrchr($string, "_"), "_");

0

你可以使用

^\w+(\d+)$

但我没有测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接