sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql:Ogiltigt reguljärt uttryck:ogiltigt tillbakareferensnummer

Problemet med Postgresql är att det för det första inte stöder att fånga grupper inom sina framsynspåståenden. Som sagt, alla fångstgrupper inom en lookahead kommer att behandlas som icke-infångningsgrupper ((?: ... ) ), betoning min:

Så även om PostgreSQL hade stöd för att ha bakåtreferenser inom ett framtidsperspektiv, skulle det fortfarande inte fungera som förväntat på grund av ovanstående begränsning (utan en fångstgrupp kan du inte ha en bakåtreferens).

En möjlig lösning (kommer tyvärr att ta lång tid för komplexa krav) skulle vara att räkna antalet för varje tecken:

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;

[skick taget och modifierat från det här svaret ; den sista raden är för att säkerställa att det bara finns de tecken i strängen]



  1. SQL Server Interns:Problematiska operatörer Pt. II – Hashing

  2. org.hibernate.MappingException:Ingen dialektmappning för JDBC-typ:1111

  3. Skicka en array från PHP till Javascript med JQuery &JSON

  4. Distribuera och hantera PostgreSQL 11:Nytt i ClusterControl 1.7.1