Поскольку мне нужно извлечь атрибут «дюймы» из описания продуктов, мне нужна функция, которая извлекает подстроку между ее повторением в ближнем пространстве и «.
Это для PHP редактора плагина WP All-Import.
$str = "SIM UMTS ITALIA 15.5" BLACK";
$from = " ";
$to = '"';
function getStringBetween($str,$from,$to){
$sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
return substr($sub,0,strpos($sub,$to));
}
Я ожидал: 15,5
Результаты: SIM UMTS ITALIA 15,5
Основываясь на комментариях к ответу, это предпочтительное решение, так как оно ничего не даст, если нет совпадения с $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
Оригинальный ответ
Это, вероятно, проще в использовании 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);
}
Других решений пока нет …