我有一个函数可以提取$ string中$ start和$ end之间的内容
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
这个问题是,它只会让我第一次在字符串中找到。例如:
$text = "John has 13 oranges and Jane has 8 oranges";
$how_many_oranges = get_string_between($text,"has "," oranges");
echo $how_many_oranges; // echos "13"
我需要它来找到字符串中的最后一个出现,以便$ how_many_oranges =“ 8”;
答案 0 :(得分:1)
如我的评论所述,将minikube ssh
换成strrpos()
找到大海捞针在干草堆弦中出现的最后位置的数字位置。
此外,我相信您应该更改
strpos()
到
if ($ini == 0)
如果if ($ini === false)
位于$start
的开头,则前者将匹配。如果根本找不到$string
,则后者将匹配。
答案 1 :(得分:0)
尝试一下:
function get_string_between($string, $start, $end){
$p1 = explode($start,$str);
for($i=1;$i<count($p1);$i++){
$p2 = explode($end,$p1[$i]);
$p[] = $p2[0];
}
return $p;
}
答案 2 :(得分:0)
我冒昧地重写了您的代码,恕我直言,使其更具可读性和解释性:)
我还建议您使用strrpos
:
function getStringBetween($string, $start, $end) {
$lastStartIndex = strrpos($string, $start);
$lastEndIndex = strrpos($string, $end);
$substringStartIndex = $lastStartIndex + strlen($start);
$substringSize = $lastStartIndex - $lastEndIndex - 1;
return substr($string, $substringStartIndex, $substringSize);
}
$text = "John has 13 oranges and Jane has 8 oranges";
$how_many_oranges = getStringBetween($text, "has", "oranges");
echo "'" . $how_many_oranges . "'"; // echos "' 8 '"
答案 3 :(得分:0)
这似乎是使用正则表达式的合理时间。
function get_string_between($string, $start, $end) {
$clean_start = preg_quote($start, '/');
$clean_end = preg_quote($end, '/');
$pattern = "/.*$clean_start (.*) $clean_end.*/U"; // U modifier => ungreedy
$default_result = ''; // returned if no matches found
$matches;
preg_match_all($pattern, $string, $matches);
return (count($matches[1]) > 0) ? end($matches[1]) : $default_result;
}
echo get_string_between('John has 13 oranges and Jane has 8 oranges', 'has', 'oranges'); // 8