Вырезать (обрезать) текст в строке - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть строка с 3 параметрами блока (слова, цифры, косые черты), и мне нужно отделить ее и вывести только последние параметры блока.Я делаю это:

<?php
$howmuch="17шт / 119ml / 255грн";
echo preg_replace("/(\\d\\w\\ / )(\\d\\w\\ / )(\\d\\w\\ / )$/i", "$3", $howmuch);
?>

Мне нужно распечатать только 255грн, но мой скрипт ничего не делает.Пожалуйста, помогите мне решить проблему.Спасибо всем.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Почему бы не сделать это простым и понятным, например, так:

$howMuch = '17шт / 119ml / 255грн';
$blocks  = explode('/',$howMuch);
echo $blocks[2];

Не нужно много объяснять или разбираться, почему он делает то, что делает.

0 голосов
/ 24 сентября 2018

Все опции без регулярных выражений:

echo explode('/', $howMuch)[2];

, если вам нужно убедиться, что строка состоит из трех секций

if (substr_count($howmuch, '/') > 1) {
    echo explode('/', $howMuch)[2];
}

если у вас php версия до 5.4

$chunks = explode('/', $howMuch);
echo $chunks[2];
0 голосов
/ 24 сентября 2018

Если формат фиксированный, вы можете получить значение без каких-либо регулярных выражений, используя

explode(" / ", $howmuch)[2]

См. PHP демо .Он разделит строку на space-/-space и даст вам третий элемент полученного массива.

В качестве альтернативы вы можете извлечь число с грн после него, используя preg_matchоперация (этот подход позволяет найти совпадение независимо от того, сколько / существует до или после совпадения):

$howmuch="17шт / 119ml / 255грн";
if (preg_match("/\d+\s*грн/ui", $howmuch, $results)) {
    echo $results[0];
}

См. демонстрационную версию PHP .

Если значение может содержать дробную часть, вы можете использовать "/\d+(?:[.,]\d+)?\s*грн/ui", где (?:[.,]\d+)? соответствует необязательной последовательности . или , с последующими цифрами 1+.

...