PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql:Невалиден регулярен израз:невалиден номер за обратна препратка

Проблемът с Postgresql е, че първо, той не поддържа наличието на групи за улавяне в своите твърдения за предварителен преглед. Въпреки това, всички групи за улавяне в рамките на поглед напред ще бъдат третирани като групи без улавяне ((?: ... ) ), акцентът е мой:

Така че дори ако PostgreSQL поддържаше наличието на обратни препратки в рамките на предварителен преглед, пак нямаше да работи според очакванията поради горното ограничение (без група за улавяне не можете да имате обратна препратка).

Възможно заобиколно решение (ще бъде дълго за сложни изисквания за съжаление) би било да се преброи броят на всеки знак:

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;

[условието е взето и променено от този отговор ; последният ред е да се гарантира, че в низа има само тези знаци]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Продължете транзакцията на Postgres с изключения в Java

  2. Хибернация :Отделете колона, съдържаща двоични данни, които не трябва да се зареждат

  3. PostgreSQL:синтаксис на ляво външно присъединяване

  4. SqlAlchemy:получаване на идентификатора на последния вмъкнат запис

  5. Docker Compose и Postgres:Името не се разрешава