sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql:Neplatný regulární výraz:neplatné číslo zpětné reference

Problém s Postgresql je v tom, že zaprvé nepodporuje skupiny zachycení v rámci svých předběžných tvrzení. To znamená, že všechny skupiny zachycení v rámci výhledu budou považovány za nezachycené skupiny ((?: ... ) ), zdůrazněte moje:

Takže i kdyby PostgreSQL podporoval zpětné reference v rámci výhledu, stále by nefungoval podle očekávání kvůli výše uvedenému omezení (bez skupiny zachycení nemůžete mít zpětný odkaz).

Možným řešením (pro složité požadavky bude bohužel zdlouhavé) by bylo spočítat počet každého znaku:

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;

[stav převzat a upraven z této odpovědi ; poslední řádek zajišťuje, že v řetězci jsou pouze tyto znaky]



  1. codeigniter databáze přesouvá do jiné tabulky

  2. Upravit dotaz materializovaného pohledu

  3. Představujeme novou funkci – Zpráva o růstu databáze Spotlight Cloud

  4. Jak převést případ řetězce v PostgreSQL