PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql:Nieprawidłowe wyrażenie regularne:nieprawidłowy numer wstecznej referencji

Problem z Postgresql polega na tym, że po pierwsze, nie obsługuje on grup przechwytywania w asercjach lookahead. To powiedziawszy, wszystkie grupy przechwytywania w lookahead będą traktowane jako grupy nieprzechwytujące ((?: ... ) ), podkreślenie moje:

Więc nawet jeśli PostgreSQL wspierał posiadanie odwołań wstecznych w lookahead, nadal nie działałby zgodnie z oczekiwaniami z powodu powyższego ograniczenia (bez grupy przechwytywania nie można mieć odwołań wstecznych).

Możliwym obejściem (niestety przy skomplikowanych wymaganiach będzie czasochłonne) byłoby policzenie liczby każdego 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;

[warunek wzięty i zmodyfikowany z tej odpowiedzi ; ostatni wiersz ma na celu zapewnienie, że w ciągu znajdują się tylko te znaki]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykorzystać dane wyjściowe zapytania wybierającego jako dane wejściowe w zapytaniu wstawiającym?

  2. czy adapter rails postgres obsługuje SSL?

  3. Odpytywanie tablicy obiektów JSON w Postgres

  4. strapi database.js / konfiguracje wielu baz danych

  5. Zmniejsz uciążliwe powiadomienia w plpgsql