我的php字符串包含pcs
,Pcs
或PCS
。
psc
,Pcs
或PCS
之前获取最后一个数字?示例:
//string:
$fStr = '51672 : Cup 12 Pcs';
$sStr = '651267 : Spoon 128 pcs @xtra';
$tStr = '2 Pcs';
//expected result:
fStr = 12
sStr = 128
tStr = 2
是否可以使用正则表达式?
Anyhelp将不胜感激。感谢
上述案例已通过以下答案解决。但是如果字符串中有多个单词pcs
,我该如何处理呢?
例如
//string
$multiStr = '178139 : 4 Pcs pen and 2 Pcs book';
//expected result
Array
(
[0] => 4
[1] => 2
)
答案 0 :(得分:1)
preg_match('/(\d+)\ ?pcs/i', $string, $match);
$output = $match[1];
这里是test
答案 1 :(得分:1)
您可以使用preg_match()
与前瞻产生全字符串匹配:
$sStr = '651267 : Spoon 128 pcs @xtra';
echo preg_match('/\d+(?= pcs)/i',$sStr,$out)?$out[0]:'';
或者preg_match()
有一个捕获组,没有前瞻:
$sStr = '651267 : Spoon 128 pcs @xtra';
echo preg_match('/(\d+) pcs/i',$sStr,$out)?$out[1]:[];
带字符串函数的非正则表达式:
$sStr = '651267 : Spoon 128 pcs @xtra';
$trunc=stristr($sStr,' pcs',true);
echo substr($trunc,strrpos($trunc,' ')+1);
多次出现:
将preg_match_all()
与捕获组一起使用:
$sStr = '178139 : 4 Pcs pen and 2 Pcs book';
var_export(preg_match_all('/(\d+) pcs/i',$sStr,$out)?$out[1]:'fail'); // capture group
或使用preg_match_all()
与前瞻:
$sStr = '178139 : 4 Pcs pen and 2 Pcs book';
var_export(preg_match_all('/\d+(?= pcs)/i',$sStr,$out)?$out[0]:'fail');
或带有数组函数的非正则表达式:
$array=explode(' ',strtolower($sStr));
var_export(array_values(array_intersect_key(array_merge([''],$array),array_flip(array_keys($array,'pcs')))));
输出:
array (
0 => '4',
1 => '2',
)
答案 2 :(得分:0)
=>使用preg_match_all()
,您可以获得所有匹配的数值。
=>然后使用end()
从数组中获取最后一个元素。
参见示例,
<?php
//string
$fStr = '51672 : Cup 12 Pcs';
$sStr = '651267 : Spoon 128 pcs @xtra';
$tStr = '2 Pcs 12 pcs 453 @xtra';
preg_match_all('/\d+/', $tStr, $matches);
echo "<pre>";
echo end($matches[0]);
?>
请参阅Demo。