Проблемът е добре известен на всички, които са работили с имплементациите на библиотеката с регулярни изрази на Хенри Спенсър:мързеливите квантори не трябва да се смесват с алчни квантори в един и същ клон тъй като това води до недефинирано поведение. Механизмът за регулярни изрази TRE, използван в R, показва същото поведение. Въпреки че можете да смесвате мързеливите и алчните квантори до известна степен, винаги трябва да сте сигурни, че получавате последователен резултат.
Решението е да се използват само мързеливи квантори вътре в групата за улавяне:
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
Вижте онлайн демонстрация
[0-9]+?,[0-9]+?
част съответства на 1 или повече цифри, но възможно най-малко пъти, последвано от запетая и след това 1 или повече цифри, възможно най-малко.
Още няколко теста (изберете REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') от dualкод> дава
+20
) докажете, че първият квантор в група задава типа алчност на квантора . В случая по-горе алчността на квантификатора от група 0 е зададена на алчен от първия ?
квантор и група 1 (т.е. ([0-9]+?,[0-9]+?)
) типът на алчността се задава с първия +?
(което е мързеливо).