Основываясь на комментариях к ответу, это предпочтительное решение, так как оно не будет возвращать ничего, когда нет совпадения со строкой $to
вместо всей строки, как в исходном решении.
function getStringBetween($str,$from,$to){
if (preg_match("/$from([^$from]+)$to/", $str, $matches))
return $matches[1];
else
return '';
}
$str = 'SIM UMTS ITALIA 35GB BLACK';
echo getStringBetween($str, ' ', 'GB') . "\n";
$str2 = 'SIM UMTS ITALIA IPHONE 2 MEGAPIXEL';
echo getStringBetween($str2, ' ', 'GB') . "\n";
$str3 = 'SIM UMTS ITALIA 15.5" BLACK';
echo getStringBetween($str3, ' ', '"') . "\n";
Вывод:
35
15.5
Демонстрация на 3v4l.org
Оригинальный ответ
Возможно, проще в использованииpreg_replace
Вместо этого ищем несколько цифр или точку перед "
и удаляем все другие символы из строки, например:
$str = 'SIM UMTS ITALIA 15.5" BLACK';
echo preg_replace('/^.*?(\d+(\.\d+)?)".*$/', '$1', $str);
Вывод:
15.5
Более обобщенно (если$from
является символом):
function getStringBetween($str,$from,$to){
return preg_replace("/^.*$from([^$from]+)$to.*$/", '$1', $str);
}
Демонстрация на 3v4l.org