Получить строку между символами за исключением - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь получить строку между двумя строками / символами.Например, я хочу получить строку «1» между test= и ;:

Вот моя рабочая функция:

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 голосов
/ 02 марта 2019

Это можно немного упростить с помощью 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] ?? '';
}
0 голосов
/ 02 марта 2019

Вы можете использовать функцию 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против ложного, а не 0, как это: if ($ini === false) return '';

...