sql >> Database teknologi >  >> RDS >> Oracle

Regex101 vs Oracle Regex

Problemet er velkendt for alle dem, der arbejdede med Henry Spencers regex-biblioteksimplementeringer:dovne kvantifikatorer bør ikke blandes sammen med grådige kvantifikatorer i én og samme gren da det fører til udefineret adfærd. TRE regex-motoren brugt i R viser den samme adfærd. Selvom du måske til en vis grad blander de dovne og grådige kvantificeringsapparater, skal du altid sørge for at få et ensartet resultat.

Løsningen er kun at bruge dovne kvantifikatorer i indfangningsgruppen:

select REGEXP_REPLACE('+000099,8420000', '^\+?(-?)0*([0-9]+?,[0-9]+?)0*$','\1\2') as Result from dual

Se onlinedemoen

[0-9]+?,[0-9]+? del matcher 1 eller flere cifre, men så få gange som muligt efterfulgt af et komma og derefter 1 eller flere cifre, så få som muligt.

Nogle flere tests (vælg REGEXP_REPLACE('+00009,010020','[0-9]+,[0-9]+?([1-9])','\1') fra dobbelt giver +20 ) bevise, at den første kvantifier i en gruppe indstiller kvantificerende grådighedstype . I ovenstående tilfælde er gruppe 0 kvantifier grådighed sat til greedy ved den første ? kvantifier og gruppe 1 (dvs. ([0-9]+?,[0-9]+?) ) grådighedstype indstilles med den første +? (som er doven).




  1. Test for NULL'er i flere kolonner i MySQL

  2. SqlAlchemy returnerer ikke alle rækker ved forespørgsel efter tabelobjekt, men returnerer alle rækker når jeg forespørger tabelobjektkolonne

  3. ElasticSearch river JDBC MySQL sletter ikke poster

  4. Hvordan man implementerer polymorfe associationer i en eksisterende database