Tento problém je dobře znám všem, kteří pracovali s implementacemi knihovny regexů Henryho Spencera:líné kvantifikátory by se neměly míchat s chamtivými kvantifikátory v jedné a téže větvi protože to vede k nedefinovanému chování. Motor regulárního výrazu TRE použitý v R vykazuje stejné chování. I když můžete do určité míry míchat líné a chamtivé kvantifikátory, musíte se vždy ujistit, že získáte konzistentní výsledek.
Řešením je používat pouze líné kvantifikátory uvnitř skupiny zachycení:
select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual
Podívejte se na online demo
[0-9]+?,[0-9]+?
část odpovídá 1 nebo více číslicím, ale pokud možno co nejméně, následuje čárka a poté 1 nebo více číslic, pokud možno co nejméně.
Některé další testy (vyberte REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') z duálního dává
+20
) prokázat, že první kvantifikátor ve skupině nastavuje typ greediness kvantifikátoru . Ve výše uvedeném případě je chamtivost kvantifikátoru skupiny 0 nastavena na chtivost podle prvního ?
kvantifikátor a skupina 1 (tj. ([0-9]+?,[0-9]+?)
) typ chamtivosti je nastaven s prvním +?
(což je líné).