sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql:Ugyldigt regulært udtryk:ugyldigt tilbagereferencenummer

Problemet med Postgresql er, at det for det første ikke understøtter at have fangegrupper inden for sine lookahead-påstande. Når det er sagt, vil alle opsamlingsgrupper inden for et lookahead blive behandlet som ikke-fangstgrupper ((?: ... ) ), fremhæver min:

Så selvom PostgreSQL understøttede at have tilbagereferencer inden for et lookahead, ville det stadig ikke fungere som forventet på grund af ovenstående begrænsning (uden en opsamlingsgruppe kan du ikke have en tilbagereference).

En mulig løsning (vil være langvarig for komplekse krav desværre) ville være at tælle antallet af hvert tegn:

WHERE
    LENGTH(REGEXP_REPLACE(name, '[^a]+', '', 'g')) < 2 AND
    LENGTH(REGEXP_REPLACE(name, '[^c]+', '', 'g')) < 2 AND
    LENGTH(REGEXP_REPLACE(name, '[^e]+', '', 'g')) < 2 AND
    LENGTH(REGEXP_REPLACE(name, '[^g]+', '', 'g')) < 2 AND
    LENGTH(REGEXP_REPLACE(name, '[^i]+', '', 'g')) < 3 AND
    LENGTH(REGEXP_REPLACE(name, '[acegi]+', '', 'g')) = 0;

[tilstand taget og ændret fra dette svar ; den sidste række er for at sikre, at der kun er disse tegn i strengen]



  1. Brug af en forespørgsel resulterer i en anden forespørgsel

  2. MySQL-forespørgsel med flere 'ELLER'-sætninger

  3. Opretter forbindelse til Postgresql i en docker-container udefra

  4. Meteor med mysql