Помогите с регулярным выражением для проверки строки вида 159,5|15|19.6 и вытаскивания чисел
Всем добрый день! Уже мучаюсь около получаса, и не могу решить проблему
Есть строка вида 159,5|15|19.6
Требования:
— Количество чисел может быть любым
— Дробная часть числа может отделяться как точкой, так и запятой.
— Строка не должна содержать в начале и в конце символ "|" (т.е. должна начинаться и заканчиваться цифрами)
— Строка не должна содержать никаких лишних символов
У меня получилось следующее выражение, которое корректно находит все числа: (?<=^|\d\|)(\d+(?:[\.,]\d)?)+(?=\|\d|$)
Но вот при попытке вставить символы начала или конца строки ^ и $ у меня ничего не выходит. Я делаю так: ^((?<=^|\d\|)(\d+(?:[\.,]\d)?)+(?=\|\d|$))+
но в таком случае, выражение находит только первое число, а на остальные не обращает внимания. Соответственно понятно, что если вписать в конце строки символ $, то ничего не будет найдено вообще.
Я пробовал кучу разных вариантов, но не буду захламлять ими вопрос. Я знаю, что я что-то недопонимаю в группировке, но что? Подскажите пожалуйста
Пользователь Alukardd предложил выражение ^\d+(?:[.,]?\d+)?(\|\d+(?:[.,]?\d+)?)*$
Оно верно определяет паттерн строки, но не возвращает вхождение всех чисел. Это конечно уже можно побороть просто разбивая строку, пусть даже моим выражением. В общем задача решена. Но может найдется кто-то, кто сможет сделать все одним выражением?
Вообще, на будущее, когда постите такие вопросы, хоть ограничьте людей ЯП, а то пишет каждый на чём удобно.
А то даже не сказали, что это PCRE, а ведь не всё что ниже pcre, да и pcre не есть perl.