flapflapjack
@flapflapjack
на треть я прав

Какая ошибка в моем регулярном выражении?

Поправьте пожалуйста меня в составленной мной регулярке.

Хочу выдирать цену из таких строк:

Супер корявое название позиции артикул 12312 серийник 213123 123 456 789,00
Еще строка 123,00
И еще строка 1,99


Должно получиться:
123 456 789,00
123,00
1,99


Моя регулярка:
(.*)\s+([0-9]{1,3}[\s]?)+[,]([0-9][0-9])

Но почему-то берется только последняя часть из цены.
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
Simkav
@Simkav
Ну если я правильно понял то вот
(\d*,\d{2})
А если нет, то можно подробнее
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
<?php
$str = 'Супер корявое название позиции артикул 12312 серийник 213123 123 456 789,00
Еще строка 123,00
И еще строка 1,99';

$re = '/[^\d,]*([\d, ]+)$/ms';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump(array_column($matches, 1));
/*
array(3) {
  [0]=>
  string(21) "213123 123 456 789,00"
  [1]=>
  string(6) "123,00"
  [2]=>
  string(4) "1,99"
}
*/
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы