MySQL में REGEXP का उपयोग करके पैटर्न मिलान और शब्द खोज
MySQL का REGEXP ऑपरेटर नियमित अभिव्यक्तियों का उपयोग करके पैटर्न मिलान करने की अनुमति देता है। यह सरल LIKE की तुलना में अधिक शक्तिशाली और लचीला है।
टेबल बनाना
mysql> CREATE TABLE DemoTable (
-> Title VARCHAR(255)
-> );
Query OK, 0 rows affected (1.82 sec)
डेटा डालना
mysql> INSERT INTO DemoTable VALUES ('John is a good player');
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO DemoTable VALUES ('No,John Doe is not a good player');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES ('Yes,Adam Smith is play cricket match');
Query OK, 1 row affected (0.28 sec)
-- फुलटेक्स्ट इंडेक्स जोड़ना (वैकल्पिक, REGEXP के लिए आवश्यक नहीं)
mysql> ALTER TABLE DemoTable ADD FULLTEXT(Title);
Query OK, 0 rows affected, 1 warning (10.60 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+--------------------------------------+
| Title |
+--------------------------------------+
| John is a good player |
| No,John Doe is not a good player |
| Yes,Adam Smith is play cricket match |
+--------------------------------------+
3 rows in set (0.00 sec)
REGEXP का उपयोग करके 'John' शब्द खोजना
mysql> SELECT * FROM DemoTable
-> WHERE Title REGEXP '^.*John.*$';
परिणाम
+----------------------------------+
| Title |
+----------------------------------+
| John is a good player |
| No,John Doe is not a good player |
+----------------------------------+
2 rows in set (0.11 sec)
REGEXP पैटर्न व्याख्या
^: स्ट्रिंग की शुरुआत.*: कोई भी वर्ण (0 या अधिक बार)John: शाब्दिक स्ट्रिंग "John".*: कोई भी वर्ण (0 या अधिक बार)$: स्ट्रिंग का अंत
पैटर्न '^.*John.*$' का अर्थ है: "John" शब्द कहीं भी आने वाली कोई भी स्ट्रिंग।
सरल समतुल्य पैटर्न
-- ये समान हैं:
WHERE Title REGEXP 'John' -- कहीं भी 'John' खोजता है
WHERE Title REGEXP '^.*John.*$' -- स्पष्ट एंकर के साथ वही
उन्नत REGEXP पैटर्न
| पैटर्न | विवरण | उदाहरण मिलान |
|---|---|---|
'^John' | 'John' से शुरू होता है | 'John is...' |
'John$' | 'John' पर समाप्त होता है | '...John' |
'[Jj]ohn' | 'John' या 'john' (केस-असंवेदनशील) | 'John', 'john' |
'John|Jane' | 'John' या 'Jane' | 'John', 'Jane' |
'Jo.n' | 'Jo' + कोई भी वर्ण + 'n' | 'John', 'Joan' |
'Jo.*n' | 'Jo' + कोई भी वर्ण + 'n' | 'John', 'Joan', 'Jon' |
'\\bJohn\\b' | पूरा शब्द 'John' (शब्द सीमा) | 'John' लेकिन 'Johnny' नहीं |
केस संवेदनशीलता
-- डिफ़ॉल्ट: केस-असंवेदनशील (कॉलेशन पर निर्भर)
WHERE Title REGEXP 'john' -- 'John', 'JOHN', 'john' से मेल खाएगा
-- केस-संवेदनशील:
WHERE Title REGEXP BINARY 'john' -- केवल 'john' से मेल खाएगा
प्रदर्शन विचार
- REGEXP इंडेक्स का उपयोग नहीं कर सकता (पूर्ण टेबल स्कैन)
- बड़े टेबल्स के लिए, फुलटेक्स्ट खोज (
MATCH() AGAINST()) पर विचार करें - सरल पैटर्न के लिए
LIKEतेज़ है
फुलटेक्स्ट खोज विकल्प (बड़े टेक्स्ट के लिए बेहतर)
-- प्राकृतिक भाषा मोड
SELECT * FROM DemoTable
WHERE MATCH(Title) AGAINST('John' IN NATURAL LANGUAGE MODE);
-- बूलियन मोड
SELECT * FROM DemoTable
WHERE MATCH(Title) AGAINST('+John' IN BOOLEAN MODE);