регулярное выражения php

257
26 апреля 2017, 13:01

Здравствуйте. хочу получит счет:

echo(preg_replace("/[^\d.]/", '', '182.20 Старая цена.'));

получаю:

182.20.

как мне получит только: 182.20

Answer 1

Цену можно извлечь, например, так:

/\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+.

Таким образом, приведенное выражение просто соответствуюет любому целому или дробному числу с разделителем точкой.

Answer 2
if (preg_match('/^(\d+(?:\.\d+)?)/', '182.20 Старая цена.', $match)) {
    echo $match[1];
}
else {
    // Неправильная цена
}
Answer 3

Ну можно более короткий способ использовать для этого просто привести к float строку

<?php
$string = '182.20 Старая stauagvu a цена.';
echo (float)$string;

http://sandbox.onlinephpfunctions.com/code/214972ada960fe609965f9e1d66b46772d21c81a

READ ALSO
Не работает Queue::later() в Laravel

Не работает Queue::later() в Laravel

Делаю как в документации$interval - время в секундах

316
Как правильно выводить массив в столбик?

Как правильно выводить массив в столбик?

Как лучше всего и более правильно выводить в столбик массив ? использовать br ?

273