【问题标题】:Get string between characters with exception获取字符之间的字符串异常
【发布时间】:2023-03-10 06:58:01
【问题描述】:

我试图在两个字符串/字符之间获取一个字符串。比如我想得到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= 之间获取字符串的函数做些什么?调用函数时,我还必须将分号作为第三个参数。

【问题讨论】:

    标签: php string function substr strpos


    【解决方案1】:

    可以使用explode函数通过token分割字符串,这里使用explode(";", $string)得到如下数组array("ok=0", "test=1", "cool=2")

    然后你可以遍历数组并再次调用explode:

    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 '';

    【讨论】:

    • 请看我的编辑。我不知道我需要的字符串是否在给定字符串的最后一部分。
    【解决方案2】:

    这可以用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] ?? '';
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多