У меня есть строка с 3 параметрами блока (слова, цифры, косые черты), и мне нужно разделить ее и распечатать только параметры последнего блока. Я делаю это:
<?php
$howmuch = "17шт / 119ml / 255грн";
echo preg_replace("/(\\d\\w\\ / )(\\d\\w\\ / )(\\d\\w\\ / )$/i", "$3", $howmuch);
?>
Мне нужно напечатать только 255грн, но мой скрипт ничего не делает. Пожалуйста, помогите мне решить проблему. Спасибо тебе за все.






Если формат фиксирован, вы можете получить значение без какого-либо регулярного выражения, используя
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+ цифр.
Почему бы не сделать это простым и понятным, например, вот так:
$howMuch = '17шт / 119ml / 255грн';
$blocks = explode('/',$howMuch);
echo $blocks[2];
Здесь не нужно много объяснять или выяснять, почему он делает то, что делает.
Все варианты без регулярных выражений:
echo explode('/', $howMuch)[2];
если вам нужно, чтобы строка состояла из трех частей
if (substr_count($howmuch, '/') > 1) {
echo explode('/', $howMuch)[2];
}
если вы используете версию php до 5.4
$chunks = explode('/', $howMuch);
echo $chunks[2];