sql >> Databáze >  >> RDS >> Mysql

Porovnejte Regex v MySQL pro opakované slovo s podmínkou vylučte závorky

Navrhuji tento regulární výraz:

^([^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]+[[:>:]])*$

Je to trochu dlouhé, ale umožňuje to větší flexibilitu, protože tyto řetězce jsou také považovány za „platné“:

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

V kódu

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

SQLFiddle

Rozdělení podle regulárních výrazů

Regulární výraz ve skutečnosti používá mnoho opakujících se částí, takže proto je trochu dlouhý:

^                                        # 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

$

Podrobný rozpis

  • #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
    

Hranice slova odpovídá začátku a konci slova. Definicí slova je zde řada abecedy, čísel a podtržítek.

[[:<:]] je úvodní hranice slova, a proto se shoduje na začátku slova.

[[:>:]] je počáteční hranice slova, a proto se shoduje na konci slova.

Jejich použití zde zajišťuje, že 2 (a numerické/numerické části) nejsou obklopeny jinými čísly (proto tvoří 21 například selhání) nebo počítejte 2 pokud máte například 21/4 jako jeden, který se počítá do dvou 2 s v řetězci.



  1. 2 způsoby, jak vypsat všechny funkce s hodnotou tabulky v databázi SQL Server

  2. MySQL – vztah jeden k jednomu?

  3. Nelze načíst soubor nebo sestavení 'MySql.Data, verze=6.8.3.0 nebo některou z jeho závislostí. Systém nemůže nalézt uvedený soubor

  4. Mohu spouštět příkazy MySQL SQL ve FireFoxu?