tkovacs
@tkovacs
веб мастер

Как найти цену регулярным выражением?

Почему этой конструкцией не могу найти все значения?
Код:
preg_match_all('/(\d{1,3})?[-.,\s]?\d{1,3}[-.,\s]?\d{3}/', $text, $prices);

Значения для поиска:
4600
4 600
5 800
5.800
не находит:
5800000
хотя:
5.800.000 находит.
Если убрать скобки (\d{1,3}), получается что \d{1,3} уже не под вопросом, а обязательны.
preg_match_all('/\d{1,3}?[-.,\s]?\d{1,3}[-.,\s]?\d{3}/', $text, $prices);

Хотел сделать через или
preg_match_all('/\d{7,10}|\d{1,3}?[-.,\s]?\d{1,3}[-.,\s]?\d{3}/', $text, $prices);

Но так на то что до | вообще не реагирует, всегда использует вторую часть.
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
~\d{1,3}?(?:[-.,\s]?\d{3})*~
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
> Как найти цену регулярным выражением?

Если именно по этому вопросу, то почитать чуть глубже как именно работают различные квантификаторы. Собственно только их количество и тип используемых квантификаторов кардинально влияет на цену регулярки, остальные вещи не так сильно.
группы могут влиять, особенно с использованием именных груп, но это больше на память и по сравнению с квантификаторами незаметно будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы