regex 获取字符串中的最后一个整数

qq24tv8q  于 2023-10-22  发布在  其他
关注(0)|答案(7)|浏览(166)

我需要在包含多个整数的字符串中隔离最近出现的整数。
如何将1替换为$lastnum1

$text = "1 out of 23";
$lastnum1 = $this->getEval(eregi_replace("[^* out of]", '', $text));
fcipmucu

fcipmucu1#

你可以做:

$text = "1 out of 23";
if(preg_match_all('/\d+/', $text, $numbers))
    $lastnum = end($numbers[0]);

注意$numbers[0]包含匹配完整模式的字符串数组,

$numbers[1]包含由标记包围的字符串数组。

wgmfuz8q

wgmfuz8q2#

$text = "1 out of 23";
$ex = explode(' ',$text);
$last = end($ex);

如果你想确定最后一个是个数字

if (is_numeric(end($ex))) {
    $last = end($ex);
}
ctzwtxfj

ctzwtxfj3#

另一种方法是:

$text = "1 out of 23";
preg_match('/(\d+)\D*$/', $text, $m);
$lastnum = $m[1];

这将匹配字符串中的最后一个数字,即使它后面是非数字。

332nm8kg

332nm8kg4#

如果无法预测输入字符串的格式,可以使用preg_match();如果字符串格式是可预测的,可以使用sscanf()
代码:(Demo

$text = "1 out of 23";

echo preg_match('/\d+(?=\D*$)/', $text, $m) ? $m[0] : '';
echo "\n";
echo sscanf($text, '%*d out of %d')[0];

echo "\n--- \n";

$text = "1 out of 23 more";

echo preg_match('/\d+(?=\D*$)/', $text, $m) ? $m[0] : '';
echo "\n";
echo sscanf($text, '%*d out of %d')[0];

两个输入字符串上的所有技术都返回23
在正则表达式中,\d表示数字字符,\D表示非数字字符。
使用sscanf()%d捕获一个或多个数字字符,%*d匹配但不捕获一个或多个数字字符。

yhived7q

yhived7q5#

使用preg_match将值提取到$matches中:

preg_match("/([0-9]+) out of ([0-9]+)/", $text, $matches);
qcbq4gxm

qcbq4gxm6#

$text = '1 out of 23';
preg_match('/\d+ out of (\d+)/', $text, $matches);
$lastnum1 = $matches[1];
snvhrwxg

snvhrwxg7#

如果格式相同,为什么不分解字符串并转换最后一个字符串呢?

<?php
$text = "1 out of 23";
$words = explode(" ",$text);
$lastnum = (int)array_pop($words);

相关问题