$str = "234 567 some text following";
如何从字符串中的第三个字符串获取子字符串到最后一个数字?
EDIT
从给出的答案来看,我的问题似乎并不清楚。在上面的例子中,我想要返回子串4 567
,而不是从第三个字符串返回到字符串的末尾。感谢。
第二次编辑
这只是一个示例字符串......字符串可以是文本和数字的混合。我需要将FROM从已知位置子串到最后出现的数字的位置。
答案 0 :(得分:0)
你应该使用substr function
substr($str, 2);
编辑:
使用正则表达式
$pattern = '/^[0-9]+/';
preg_match($pattern, substr($str, 2), $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
EDIT2: 测试并运作
$pattern = '/^([0-9][ ]*)+/';
preg_match($pattern, substr($str, 2), $matches);
print_r($matches);
EDIT3: 没看到你的最后编辑,建立一个新的^^
EDIT4:
$str = "234 567 some text 123 22 following 12 something";
$pattern = '/^([ ]*([0-9][ ]*)*([a-zA-Z][ ]*)*[0-9]*)*[0-9]/';
preg_match($pattern, substr($str, 2), $matches);
echo $matches[0];
给我4 567 some text 123 22 following 12
这是你期待的吗?
编辑5:
再次新的^^'/^([0-9 :._\-]*[a-zA-Z]*[:._\-]*)*[0-9]/'
答案 1 :(得分:0)
试试这个:
substr($str,2,strlen($str));
编辑(新答案):
此代码正常运行:
$str = preg_replace( "/\D/", "", $str);
echo substr($str,2);
答案 2 :(得分:0)
<?php
$subStr = substr($str, 2);
?>
默认情况下,长度(第三个参数)在省略时将默认为字符串的结尾。请注意,字符从0开始,因此第三个字符将位于第2位。
答案 3 :(得分:0)
您可以在正则表达式中使用negative lookahead来执行此操作。
<?php
$lastNumber = getLastNumber("234 567 some text following");
var_dump($lastNumber);
function getLastNumber($string) {
preg_match("/[0-9](?!.*[0-9])/", $string, $match);
if (!empty($match[0])) return $match[0];
return false;
}
?>
编辑:对不起,我误读了;以为你想要最后一个独立的号码。
双重编辑:这似乎可以做你想要的事情
<?php
$string = substr("234 567 some text 123 22 following", 2);
preg_match("/[0-9 ]+/", $string, $matches);
if (!empty($matches)) {
$number = intval(str_replace(" ", "", $matches[0]));
var_dump($number);
}
?>
因为它返回“4567”。当然,您希望留出空间,只需使用$matches[0]
代替$number
。
答案 4 :(得分:0)
我偶然发现了这一点,并认为我会分享我的解决方案。
<?php
$string = "234 567 some text following";
$start = 2;
if(preg_match_all('/\d+/', $string, $sub)){
$lastNumber = end($sub[0]);
$newString = substr($string,$start, strrpos($string, $lastNumber) + strlen($lastNumber) - $start);
}
echo $newString;
此行提取字符串
中的所有数字if(preg_match_all('/\d+/', $string, $sub))
在这里我们获取最后一个数字
$lastNumber = end($sub[0]);
然后我们使用strrpos
找到最后一次出现的数字,以防最后一个数字出现多次。然后,使用该位置从起始位置提取子串到最后一个数字:
$newString = substr($string,$start, strrpos($string, $lastNumber)
+ strlen($lastNumber) - $start);