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]