Извлеките подстроку между ближайшим пробелом и определенным символом - PullRequest
0 голосов
/ 02 февраля 2019

Поскольку мне нужно извлечь атрибут «дюймы» из описания продуктов, мне нужна функция, которая извлекает подстроку между повторением ближайшего пространства и ".

Это для 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

1 Ответ

0 голосов
/ 02 февраля 2019

Основываясь на комментариях к ответу, это предпочтительное решение, так как оно не будет возвращать ничего, когда нет совпадения со строкой $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

...