Задать вопрос

Помогите с регулярным выражением для проверки строки вида 159,5|15|19.6 и вытаскивания чисел

Всем добрый день! Уже мучаюсь около получаса, и не могу решить проблему

Есть строка вида 159,5|15|19.6

Требования:
— Количество чисел может быть любым
— Дробная часть числа может отделяться как точкой, так и запятой.
— Строка не должна содержать в начале и в конце символ "|" (т.е. должна начинаться и заканчиваться цифрами)
— Строка не должна содержать никаких лишних символов

У меня получилось следующее выражение, которое корректно находит все числа:
(?<=^|\d\|)(\d+(?:[\.,]\d)?)+(?=\|\d|$)

Но вот при попытке вставить символы начала или конца строки ^ и $ у меня ничего не выходит. Я делаю так:
^((?<=^|\d\|)(\d+(?:[\.,]\d)?)+(?=\|\d|$))+
но в таком случае, выражение находит только первое число, а на остальные не обращает внимания. Соответственно понятно, что если вписать в конце строки символ $, то ничего не будет найдено вообще.

Я пробовал кучу разных вариантов, но не буду захламлять ими вопрос. Я знаю, что я что-то недопонимаю в группировке, но что? Подскажите пожалуйста
  • Вопрос задан
  • 7666 просмотров
Подписаться 3 Оценить 4 комментария
Ответ пользователя motl К ответам на вопрос (12)
@motl
Sorry, here is the correct version:

^([0-9]+[.,]?[0-9]*\|)*([0-9])$/
Ответ написан