Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dopasuj Regex w MySQL dla powtarzającego się słowa z warunkiem wykluczenia nawiasów

Proponuję to wyrażenie regularne:

^([^2]|[[:<:]][0-9]+/[0-9]+[[:>:]])*([[:<:]]|[a-z])2([[:>:]]|[a-z])([^2]|[[:<:]][0-9]+/[0-9]+[[:>:]])+([[:<:]]|[a-z])2([[:>:]]|[a-z])([^2]|[[:<:]][0-9]+/[0-9]+[[:>:]])*$

Jest trochę długi, ale zapewnia większą elastyczność, ponieważ te ciągi są również uważane za „prawidłowe”:

(2/2) 2new 2new
2new (2/2) 2new (2/2)

W kodzie

SELECT
    *
FROM
    A
WHERE 
    description REGEXP '^(([^2]+|[[:<:]][0-9]+/[0-9]+[[:>:]])*2([[:>:]]|[a-z])){2}([^2]+|[[:<:]][0-9]+/[0-9]+[[:>:]])*$'

SQLFiddle

Podział wyrażenia regularnego

Wyrażenie regularne używa wielu powtarzających się części, dlatego jest trochę długie:

^                                        # Beginning of string

(                                        # Open repeat group
   ([^2]+|[[:<:]][0-9]+/[0-9]+[[:>:]])*  # Any characters. See #1
  2                                      # 2
  ([[:>:]]|[a-z])                        # Word boundary or alphabet/letter. See #2
){2}                                     # Close repeat group and repeat 2 times

([^2]+|[[:<:]][0-9]+/[0-9]+[[:>:]])*     # Any characters. See #1

$

Szczegółowy podział

  • #1

    (           # Open group
    
      [^2]+     # Any characters except 2
    
    |           # OR
    
      [[:<:]]   # Open word boundary
      [0-9]+    # Any numbers
      /         # Forward slash
      [0-9]+    # Any numbers
      [[:>:]]   # Close word boundary
    
    )*          # Close group and repeat any number of times
    
  • #2

    (           # Open group
      [[:>:]]   # Word boundary
    |           # Or
      [a-z]     # Letter/alphabet
    )           # Close group
    

Granica słowa pasuje do początku i końca słów. Definicja słowa tutaj jest serią alfabetu, cyfr i znaków podkreślenia.

[[:<:]] jest granicą słowa otwierającego, a zatem pasuje na początku słowa.

[[:>:]] jest granicą słowa otwierającego, a zatem pasuje na końcu słowa.

Ich użycie tutaj zapewnia, że ​​2 (i części numeryczne/numeryczne) nie są otoczone innymi liczbami (dlatego sprawia, że ​​21 na przykład niepowodzenie) lub policz 2 jeśli masz na przykład 21/4 jako jeden, który liczy się do dwóch 2 s w ciągu.



  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 uzyskać partycję według rodzaju funkcjonalności za pomocą zmiennych w MySQL 5.7?

  2. Funkcja zdefiniowana przez użytkownika MySQL do wysyłania wiadomości systemu Windows

  3. nodejs express/routes i mysql

  4. MySQL - wybierz grupy posiadające wartości obejmujące zbiór

  5. Jak wykonać pogrupowany ranking w MySQL