我需要在包含多个整数的字符串中隔离最近出现的整数。如何将1替换为$lastnum1?
1
$lastnum1
$text = "1 out of 23"; $lastnum1 = $this->getEval(eregi_replace("[^* out of]", '', $text));
fcipmucu1#
你可以做:
$text = "1 out of 23"; if(preg_match_all('/\d+/', $text, $numbers)) $lastnum = end($numbers[0]);
注意$numbers[0]包含匹配完整模式的字符串数组,
$numbers[0]
$numbers[1]包含由标记包围的字符串数组。
$numbers[1]
wgmfuz8q2#
$text = "1 out of 23"; $ex = explode(' ',$text); $last = end($ex);
如果你想确定最后一个是个数字
if (is_numeric(end($ex))) { $last = end($ex); }
ctzwtxfj3#
另一种方法是:
$text = "1 out of 23"; preg_match('/(\d+)\D*$/', $text, $m); $lastnum = $m[1];
这将匹配字符串中的最后一个数字,即使它后面是非数字。
332nm8kg4#
如果无法预测输入字符串的格式,可以使用preg_match();如果字符串格式是可预测的,可以使用sscanf()。代码:(Demo)
preg_match()
sscanf()
$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匹配但不捕获一个或多个数字字符。
23
\d
\D
%d
%*d
yhived7q5#
使用preg_match将值提取到$matches中:
preg_match
$matches
preg_match("/([0-9]+) out of ([0-9]+)/", $text, $matches);
qcbq4gxm6#
$text = '1 out of 23'; preg_match('/\d+ out of (\d+)/', $text, $matches); $lastnum1 = $matches[1];
snvhrwxg7#
如果格式相同,为什么不分解字符串并转换最后一个字符串呢?
<?php $text = "1 out of 23"; $words = explode(" ",$text); $lastnum = (int)array_pop($words);
7条答案
按热度按时间fcipmucu1#
你可以做:
注意
$numbers[0]
包含匹配完整模式的字符串数组,$numbers[1]
包含由标记包围的字符串数组。wgmfuz8q2#
如果你想确定最后一个是个数字
ctzwtxfj3#
另一种方法是:
这将匹配字符串中的最后一个数字,即使它后面是非数字。
332nm8kg4#
如果无法预测输入字符串的格式,可以使用
preg_match()
;如果字符串格式是可预测的,可以使用sscanf()
。代码:(Demo)
两个输入字符串上的所有技术都返回
23
。在正则表达式中,
\d
表示数字字符,\D
表示非数字字符。使用
sscanf()
,%d
捕获一个或多个数字字符,%*d
匹配但不捕获一个或多个数字字符。yhived7q5#
使用
preg_match
将值提取到$matches
中:qcbq4gxm6#
snvhrwxg7#
如果格式相同,为什么不分解字符串并转换最后一个字符串呢?