如何获取字符串的最后一次出现?

时间:2018-06-25 01:38:53

标签: php

我有一个函数可以提取$ 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”;

4 个答案:

答案 0 :(得分:1)

如我的评论所述,将minikube ssh换成strrpos()

  

找到大海捞针在干草堆弦中出现的最后位置的数字位置。

此外,我相信您应该更改

strpos()

if ($ini == 0)

如果if ($ini === false) 位于$start的开头,则前者将匹配。如果根本找不到$string,则后者将匹配。

演示〜https://eval.in/1027283

答案 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;
}

来源:stackoverflow.com/a/45033158

答案 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