Регулярное выражение
Регулярное выражение
Здравствуйте! Помогите разобраться с регуляркой, не могу никак придумать что писать.
есть строка ' Цена: 12р цена 10р Цена:9 абвстр123 '
Нужно получить 12 10 9.
пишу следующее выражение (?<=[Цц]ена[: ]*)\d{1,}, но ничего не выполняется. Если же так написать (?<=[Цц]ена)\d{1,}, и ввести в строку соответствующую запись (Цена123), то все получается. Получается в такую конструкцию (?<= ) нельзя вставлять это [: ]* Пробовал заменить на ? , но тоже ничего не вышло. По отдельности обе конструкции выполняются.
есть строка ' Цена: 12р цена 10р Цена:9 абвстр123 '
Нужно получить 12 10 9.
пишу следующее выражение (?<=[Цц]ена[: ]*)\d{1,}, но ничего не выполняется. Если же так написать (?<=[Цц]ена)\d{1,}, и ввести в строку соответствующую запись (Цена123), то все получается. Получается в такую конструкцию (?<= ) нельзя вставлять это [: ]* Пробовал заменить на ? , но тоже ничего не вышло. По отдельности обе конструкции выполняются.
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Регулярное выражение
Код: Выделить всё
/(Цена|цена)+[:\s]+(\d+)/
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Регулярное выражение
Код: Выделить всё
/цена[:\s]+(\d+)/i
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Регулярное выражение
Найдёт лишь "цена 10". А плюсик и вправду лишний я поставил :)Sam Dark писал(а):Код: Выделить всё
/цена[:\s]+(\d+)/i
Касаемо вывода строки "12 10 9":
Код: Выделить всё
$pattern = '/(Цена|цена)[:\s]+(\d+)/';
preg_match_all($pattern, 'Цена: 12р цена 10р Цена:9 абвстр123', $matches);
$out = implode(',', $matches[0]);
echo preg_replace('/\D+/', ' ', $out);
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Регулярное выражение
Да, действительно. Я забыл юникод:
Вот так найдёт всё что нужно.
Код: Выделить всё
/цена[:\s]+(\d+)/iu
Нравится Yii? Давайте сделаем его лучше!.
Re: Регулярное выражение
Код: Выделить всё
/цена[:\s]+(\d+)/iu
Подсмотрев немного ваш код, сделал свое кривое решение.
Код: Выделить всё
(?<=[Цц]ена(:| ))\d+|(?<=[Цц]ена(: ))\d+
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Регулярное выражение
Ну, задачу моя регулярка решает:
есть строка ' Цена: 12р цена 10р Цена:9 абвстр123 '
Нужно получить 12 10 9.
Нравится Yii? Давайте сделаем его лучше!.
Re: Регулярное выражение
Ломал голову в чем же смысл в использовании утверждения в данном примере. Но после слов
preg_match_all('/цена[:\s]+(\d+)/iu', ' Цена: 12р цена 10р Цена:9 абвстр123 ', $matches);
var_dump($matches[1]);
ко мне пришло озарениеЭто выражение находит все со словом цена.
preg_match_all('/цена[:\s]+(\d+)/iu', ' Цена: 12р цена 10р Цена:9 абвстр123 ', $matches);
var_dump($matches[1]);
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Регулярное выражение
Не, ну естественно. Я думал смысл круглых скобочек известен
Нравится Yii? Давайте сделаем его лучше!.