获取字符之间的字符串与异常

时间:2019-03-02 00:11:21

标签: php string function substr strpos

我正在尝试在两个字符串/字符之间获取一个字符串。例如,我想在test=;之间获得字符串“ 1”:

这是我的工作职能:

function getStringInBetween($str, $start, $end){
    $str = ' ' . $str;
    $ini = strpos($str, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($str, $end, $ini) - $ini;
    return substr($str, $ini, $len);
}

$myString = 'ok=0;test=1;cool=2';

echo getStringInBetween('$myString', 'test=', ';'); // returned output: 1

echo getStringInBetween('$myString', 'cool=', ';'); // this doesn't work. This should output 2

但是我的问题是,是否必须在cool=之间插入字符串?我无法使用该函数来获取它,因为分号;不在结尾。它必须是动态的。我不知道我需要的字符串是否在给定字符串的最后一部分。

对于仍能够在cool=之间获取字符串的函数,我该怎么办?调用函数时,我还必须将分号作为第三个参数。

2 个答案:

答案 0 :(得分:1)

您可以使用explode函数通过令牌将字符串分割,这里使用explode(“;”,$ string)获得以下数组array("ok=0", "test=1", "cool=2")

然后,您可以遍历数组并进行第二次爆炸:

foreach(explode(";", $string) as $pair)
{
   $array = explode("=", $pair);
   $key = $array[0];
   $value = $array[1];
   //Do something with $key and $value
}

关于您的功能,类似的事情应该可以解决:

function getStringInBetween($str, $start, $end){
    $ini = strpos($str, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);

    $endIndex = strpos($str, $end, $ini);
    if ($endIndex === false)
      return substr($str, $ini);
    else
      return substr($str, $ini, $endIndex - $ini);
}

此外,您还应检查$ini是否为false而不是0:if ($ini === false) return '';

答案 1 :(得分:0)

使用strstr

可以简化一点
function getStringInBetween($str, $start, $end) {
    $result = substr(strstr($str, $start), strlen($start));
    if (strpos($result, $end) !== false) {
        $result = strstr($result, $end,true);
    }
    return $result;
}

或者您可以使用正则表达式。

function getStringInBetween($str, $start, $end) {
    preg_match("/(?<=$start).*?(?=$end|$)/", $str, $matches);
    return $matches[0] ?? '';
}