Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

शर्त के साथ दोहराए गए शब्द के लिए MySQL में Regex का मिलान करें, कोष्ठकों को छोड़ दें

मैं इस रेगेक्स का प्रस्ताव करता हूं:

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

यह थोड़ा लंबा है, लेकिन यह कुछ और लचीलेपन की अनुमति देता है जिसमें उन स्ट्रिंग्स को 'वैध' भी माना जाता है:

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

कोड में

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

SQLFiddle

रेगेक्स विश्लेषण

रेगेक्स वास्तव में कई दोहराए जाने वाले भागों का उपयोग करता है, इसलिए यह थोड़ा लंबा है:

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

$

विस्तृत विश्लेषण

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

एक शब्द सीमा शब्दों की शुरुआत और अंत से मेल खाती है। यहाँ एक शब्द की परिभाषा वर्णमाला, संख्याओं और अंडरस्कोर वर्णों की एक श्रृंखला है।

[[:<:]] एक प्रारंभिक शब्द सीमा है और इस प्रकार एक शब्द की शुरुआत में मेल खाता है।

[[:>:]] एक प्रारंभिक शब्द सीमा है और इस प्रकार एक शब्द के अंत में मेल खाता है।

यहां उनका उपयोग सुनिश्चित करता है कि 2 (और संख्यात्मक/संख्यात्मक भाग) अन्य संख्याओं से घिरे नहीं हैं (इसलिए 21 . बनाता है उदाहरण के लिए विफल) या 2 . की गणना करें यदि आपके पास उदाहरण के लिए 21/4 . है एक के रूप में जो दो 2 . की ओर गिना जाता है s स्ट्रिंग में।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL व्यवस्थापक बैकअप:संगतता मोड, यह वास्तव में क्या कर रहा है?

  2. फैंटम रीड कैसे तैयार करें?

  3. EXISTS क्वेरी में LIMIT का उपयोग करने का कोई मतलब?

  4. SQL को कुछ उपयोगकर्ता से/के लिए अंतिम संदेश मिलते हैं

  5. SubSonic 3 और MySQL, क्लीनअप () विधि में कॉलम नाम से अंडरस्कोर को हटाकर linq-query में संपत्ति का उपयोग करते समय अपवाद का कारण बनता है