Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cocokkan Regex di MySQL untuk kata yang diulang dengan kondisi tidak termasuk tanda kurung

Saya mengusulkan regex ini:

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

Agak panjang, tetapi memungkinkan lebih banyak fleksibilitas karena string tersebut juga dianggap 'valid':

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

Dalam kode

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

SQLFiddle

Perincian ekspresi reguler

Regex sebenarnya menggunakan banyak bagian yang berulang, jadi itu sebabnya agak panjang:

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

$

Perincian mendetail

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

Batas kata cocok dengan awal dan akhir kata. Yang dimaksud dengan kata di sini adalah rangkaian alfabet, angka, dan karakter garis bawah.

[[:<:]] adalah batas kata pembuka dan dengan demikian cocok di awal kata.

[[:>:]] adalah batas kata pembuka dan dengan demikian cocok di akhir kata.

Penggunaannya di sini memastikan bahwa 2 (dan bagian numerik/angka) tidak dikelilingi oleh angka lain (karenanya membuat 21 gagal misalnya) atau hitung 2 jika Anda memiliki misalnya 21/4 sebagai salah satu yang diperhitungkan dalam dua 2 s dalam string.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperluas kelas dalam database

  2. Buat fungsi MySQL di Laravel 5.5

  3. Pelajari cara mengimpor data Excel ke database MySQL

  4. Tetapkan alias secara dinamis ke semua nama bidang dalam kueri msyql

  5. RoR:bagaimana cara menguji aplikasi saya terhadap banyak basis data?