Здравствуйте. хочу получит счет:
echo(preg_replace("/[^\d.]/", '', '182.20 Старая цена.'));
получаю:
182.20.
как мне получит только: 182.20
Цену можно извлечь, например, так:
/\d+(?:\.\d+)?/
а с помощью preg_replace заменить следующим образом:
$value = preg_replace("/.*?(\d+(?:\.\d+)?).*/", "$1", $str);
Но, возможно, для ваших целей будет достаточно следующего?
$str = '182.20 Старая цена.';
$value = trim(stri_replace("старая цена.", "", $str));
Что происходит здесь, и почему не работает ваше выражение.
\. и цифр \d. Поэтому последняя точка также
остается на месте. Если ваша входная строка будет иметь вид 123.345.456.890 то вся эта конструкция подойдет под это выражение результат.\d+ соответствуюет целой части.(?:\.\d+)?. Здесь во-первых, конечный знак ? говорит о том, что этой группы может и не быть. Начальная конструкция ?: в скобках говорит, что ее не надо захватывать (non-capturing group). Внутри же группы должна находится точка .\и 1 или более цифр \d+. Таким образом, приведенное выражение просто соответствуюет любому целому или дробному числу с разделителем точкой.
if (preg_match('/^(\d+(?:\.\d+)?)/', '182.20 Старая цена.', $match)) {
echo $match[1];
}
else {
// Неправильная цена
}
Ну можно более короткий способ использовать для этого просто привести к float строку
<?php
$string = '182.20 Старая stauagvu a цена.';
echo (float)$string;
http://sandbox.onlinephpfunctions.com/code/214972ada960fe609965f9e1d66b46772d21c81a
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости