MySQL रेगुलर एक्सप्रेशन्स (REGEXP) गाइड: सिंटैक्स, MySQL 8 फ़ंक्शन, उदाहरण, और सर्वोत्तम प्रथाएँ

目次

1. परिचय

MySQL में रेगुलर एक्सप्रेशन का उपयोग

MySQL डेटा को खोजने और संशोधित करने के लिए एक शक्तिशाली डेटाबेस प्रबंधन प्रणाली है, और यह अधिक लचीली खोज को सक्षम करने के लिए रेगुलर एक्सप्रेशन (REGEXP) का समर्थन भी करता है। रेगुलर एक्सप्रेशन के साथ, आप विशिष्ट पैटर्न से मेल खाने वाले डेटा को कुशलतापूर्वक निकाल सकते हैं, साथ ही डेटा को फॉर्मेट या वैधता जांच भी कर सकते हैं।

MySQL में रेगुलर एक्सप्रेशन के उपयोग के लाभ

MySQL रेगुलर एक्सप्रेशन का उपयोग करने से निम्नलिखित लाभ मिलते हैं:

  • उन्नत खोज : विशिष्ट स्ट्रिंग या पैटर्न वाले डेटा को आसानी से निकाल सकते हैं।
  • डेटा की अखंडता जाँच : इनपुट वैधता के लिए उपयोगी (जैसे, ईमेल पता फ़ॉर्मेट की वैधता)।
  • LIKE ऑपरेटर से अधिक शक्तिशाली : LIKE, जो वाइल्डकार्ड (% और _) का उपयोग करता है, की तुलना में, REGEXP आपको अधिक जटिल खोज शर्तें अधिक लचीले ढंग से परिभाषित करने की अनुमति देता है।

इस लेख का उद्देश्य और संरचना

यह लेख MySQL में रेगुलर एक्सप्रेशन की मूल बातें से लेकर उन्नत उपयोग, प्रदर्शन अनुकूलन, और MySQL 8.0 और बाद में प्रस्तुत नई रेगुलर एक्सप्रेशन फ़ंक्शनों तक सब कुछ समझाता है। व्यावहारिक उदाहरणों के साथ, सामग्री को शुरुआती लोगों के लिए भी समझना आसान बनाने के लिए डिज़ाइन किया गया है।

लेख की संरचना:

  1. MySQL रेगुलर एक्सप्रेशन की मूल बातें और सिंटैक्स
  2. MySQL 8.0 और बाद में जोड़े गए रेगुलर एक्सप्रेशन फ़ंक्शन
  3. व्यावहारिक उदाहरण (वैधता, डेटा निष्कर्षण, फ़ॉर्मेट परिवर्तन)
  4. रेगुलर एक्सप्रेशन के उपयोग में महत्वपूर्ण विचार (प्रदर्शन, सुरक्षा)
  5. अक्सर पूछे जाने वाले प्रश्न (FAQ)
  6. सारांश

2. MySQL में रेगुलर एक्सप्रेशन की मूल बातें और सिंटैक्स

MySQL में रेगुलर एक्सप्रेशन का उपयोग कैसे करें

MySQL में, आप रेगुलर एक्सप्रेशन के साथ काम करने के लिए REGEXP ऑपरेटर (या RLIKE) का उपयोग करते हैं। LIKE ऑपरेटर की तरह, इसका उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या किसी कॉलम का मान निर्दिष्ट रेगेक्स पैटर्न से मेल खाता है।

बेसिक सिंटैक्स

SELECT * FROM table_name WHERE column_name REGEXP 'regex_pattern';

या

SELECT * FROM table_name WHERE column_name RLIKE 'regex_pattern';

RLIKE REGEXP का उपनाम है, और दोनों समान रूप से कार्य करते हैं।

उदाहरण
उदाहरण के लिए, उन रिकॉर्ड्स को खोजने के लिए जहाँ नाम में अक्षर “山” शामिल है:

SELECT * FROM users WHERE name REGEXP '山';

बेसिक रेगुलर एक्सप्रेशन पैटर्न

MySQL रेगुलर एक्सप्रेशन में, आप निम्नलिखित जैसे पैटर्न का उपयोग कर सकते हैं।

SymbolMeaningExampleResult
.Any single charactera.cMatches “abc”, “aac”, “adc”
^Start of the string^abcMatches “abcde” but not “dabc”
$End of the stringxyz$Matches “axyz” but not “xyzb”
[]Any one of the specified characters[abc]Matches “a”, “b”, or “c”
[^]Any character not in the specified set[^abc]Matches any character except “a”, “b”, or “c”
*Repeat the preceding character 0 or more timesa*Matches “”, “a”, “aa”, “aaa”, etc.
+Repeat the preceding character 1 or more timesa+Matches “a”, “aa”, “aaa”, etc. (does not match the empty string)
{n}Repeat the preceding character exactly n timesa{3}Matches “aaa”
{n,}Repeat the preceding character at least n timesa{2,}Matches “aa”, “aaa”, “aaaa”, etc.
{n,m}Repeat the preceding character between n and m timesa{2,4}Matches “aa”, “aaa”, “aaaa”

LIKE ऑपरेटर से अंतर

MySQL LIKE ऑपरेटर भी प्रदान करता है, जो साधारण पैटर्न मिलान के लिए आमतौर पर उपयोग किया जाता है। हालांकि, REGEXP LIKE से अधिक शक्तिशाली है और अधिक जटिल शर्तों के साथ खोज का समर्थन करता है।

उदाहरण 1: LIKE ऑपरेटर का उपयोग

SELECT * FROM users WHERE name LIKE '%山%';
  • LIKE के साथ, आप ऐसे डेटा की खोज कर सकते हैं जिसमें शामिल है, लेकिन आप केवल साधारण वाइल्डकार्ड (% और _) का उपयोग कर सकते हैं।

उदाहरण 2: REGEXP ऑपरेटर का उपयोग

SELECT * FROM users WHERE name REGEXP '^山';
  • REGEXP के साथ, आप केवल उन डेटा को निकाल सकते हैं जहाँ नाम 山 से शुरू होता है

कई पैटर्न कैसे निर्दिष्ट करें

आप | का उपयोग करके OR शर्त के साथ कई पैटर्न निर्दिष्ट कर सकते हैं।

उदाहरण: उन उपयोगकर्ताओं को प्राप्त करें जिनका अंतिम नाम “佐藤” या “田中” है

SELECT * FROM users WHERE name REGEXP '佐藤|田中';

नकारात्मक मिलान

यदि आप वर्ग कोष्ठकों के भीतर ^ का उपयोग करते हैं, तो आप ऐसे डेटा को प्राप्त कर सकते हैं जो “निर्दिष्ट अक्षर नहीं रखता है।”

उदाहरण: ऐसा डेटा जो “山” के अलावा किसी अन्य अक्षर से शुरू होता है

SELECT * FROM users WHERE name REGEXP '^[^山]';

इस मामले में, यह उन रिकॉर्ड्स को लौटाता है जहाँ नाम से शुरू नहीं होता है।

सारांश

  • MySQL में, REGEXP LIKE की तुलना में अधिक शक्तिशाली पैटर्न खोज सक्षम करता है।
  • बुनियादी सिंटैक्स और पैटर्न ( . , ^ , $ , [] , * , + , आदि) को समझना लचीली खोज को संभव बनाता है।
  • LIKE से अंतर को समझना और प्रत्येक को उचित रूप से उपयोग करना महत्वपूर्ण है।
  • | का उपयोग करने से कई पैटर्न के साथ खोज संभव होती है।
  • नकारात्मक कैरेक्टर क्लास [^ ] का उपयोग करने से आप उन डेटा की खोज कर सकते हैं जो विशिष्ट कैरेक्टर से शुरू नहीं होते।

3. MySQL 8.0 और बाद में जोड़े गए रेगुलर एक्सप्रेशन फ़ंक्शन

MySQL 8.0 में, पारंपरिक REGEXP ऑपरेटर के अलावा, चार नए फ़ंक्शन जोड़े गए हैं जो अधिक लचीली रेगुलर एक्सप्रेशन खोज को सक्षम करते हैं। ये मैच पोजीशन प्राप्त करने, सबस्ट्रिंग निकालने, और रिप्लेसमेंट करने की सुविधा देते हैं, जिससे MySQL में रेगेक्स के साथ आप जो कर सकते हैं उसकी सीमा काफी बढ़ जाती है।

इस अनुभाग में, हम प्रत्येक नए रेगुलर एक्सप्रेशन फ़ंक्शन को विस्तार से समझाते हैं और ठोस उदाहरण दिखाते हैं।

3.1 REGEXP_LIKE()

अवलोकन

REGEXP_LIKE(), REGEXP ऑपरेटर की तरह, यह जांचता है कि कॉलम मान निर्दिष्ट रेगेक्स पैटर्न से मेल खाता है या नहीं।

सिंटैक्स

REGEXP_LIKE(column_name, 'regex_pattern' [, flags])
  • column_name : खोजने के लिए कॉलम
  • 'regex_pattern' : शर्त के रूप में उपयोग किया जाने वाला रेगेक्स पैटर्न
  • flags (optional) : केस संवेदनशीलता (केस-इंसेंसिटिव मिलान के लिए i उपयोग करें)

उदाहरण

“उन उपयोगकर्ताओं को प्राप्त करें जिनका ईमेल gmail.com या yahoo.co.jp पर समाप्त होता है”

SELECT * FROM users WHERE REGEXP_LIKE(email, '(@gmail\.com|@yahoo\.co\.jp)$');

“’admin’ शामिल करने वाले उपयोगकर्ता नामों की खोज करें (केस-इंसेंसिटिव)”

SELECT * FROM users WHERE REGEXP_LIKE(username, 'admin', 'i');

REGEXP_LIKE() REGEXP ऑपरेटर के समान उद्देश्य को पूरा करता है, लेकिन यह अधिक मानक‑SQL‑अनुकूल शैली प्रदान करता है।

3.2 REGEXP_INSTR()

अवलोकन

REGEXP_INSTR() स्ट्रिंग के भीतर रेगेक्स मैच के स्थिति (शुरुआती इंडेक्स) को लौटाता है।

सिंटैक्स

REGEXP_INSTR(column_name, 'regex_pattern' [, start_position, occurrence, return_option, flags])
  • start_position (optional): खोज शुरू करने की स्थिति (डिफ़ॉल्ट: 1)
  • occurrence (optional): कौन सा मैच क्रम लौटाना है (डिफ़ॉल्ट: 1)
  • return_option (optional): 0 (शुरुआती स्थिति लौटाएँ) या 1 (मैच के अंत की स्थिति लौटाएँ)
  • flags (optional): केस-इंसेंसिटिव मिलान के लिए i उपयोग करें

उदाहरण

“यदि फ़ोन नंबर 090 या 080 से शुरू होता है, तो शुरुआती स्थिति प्राप्त करें”

SELECT phone, REGEXP_INSTR(phone, '^(090|080)') AS match_pos FROM users;

“ईमेल पते के डोमेन भाग की शुरुआती स्थिति प्राप्त करें”

SELECT email, REGEXP_INSTR(email, '@') AS domain_start FROM users;
  • यह @ के मिलने की स्थिति लौटाता है (उदाहरण: user@example.com में यह 5 लौटाता है)।

REGEXP_INSTR() के साथ, आप स्थिति संबंधी जानकारी प्राप्त कर सकते हैं, जिससे स्ट्रिंग प्रोसेसिंग के विकल्प बढ़ते हैं।

3.3 REGEXP_SUBSTR()

अवलोकन

REGEXP_SUBSTR() स्ट्रिंग के भीतर रेगेक्स पैटर्न से मेल खाने वाला सबस्ट्रिंग निकालता है।

सिंटैक्स

REGEXP_SUBSTR(column_name, 'regex_pattern' [, start_position, occurrence, flags])
  • occurrence (optional): nth मैच प्राप्त करें (डिफ़ॉल्ट: 1)
  • flags (optional): केस संवेदनशीलता (i केस को अनदेखा करने के लिए)

उदाहरण

“ईमेल पते से केवल डोमेन भाग निकालें”

SELECT email, REGEXP_SUBSTR(email, '@[a-zA-Z0-9.-]+') AS domain FROM users;

“संदेश में पहली संख्या क्रम प्राप्त करें”

SELECT message, REGEXP_SUBSTR(message, '[0-9]+') AS first_number FROM logs;

REGEXP_SUBSTR() के साथ, आप विशिष्ट पैटर्न निकाल सकते हैं और उन्हें डेटा को व्यवस्थित और रूपांतरित करने में उपयोग कर सकते हैं।

3.4 REGEXP_REPLACE()

अवलोकन

REGEXP_REPLACE() रेगेक्स पैटर्न से मेल खाने वाले सबस्ट्रिंग को किसी अन्य स्ट्रिंग से बदलता है।

सिंटैक्स

REGEXP_REPLACE(column_name, 'regex_pattern', 'replacement' [, occurrence, flags])
  • replacement : मिलान किए गए भाग को बदलने के लिए स्ट्रिंग
  • occurrence (optional): केवल nth मिलान को बदलें (यदि छोड़ा गया तो सभी मिलान बदलते हैं)
  • flags (optional): केस‑इंसेंसिटिव मिलान के लिए i का उपयोग करें

उदाहरण

“फ़ोन नंबरों से हाइफ़न (-) हटाएँ”

SELECT phone, REGEXP_REPLACE(phone, '-', '') AS clean_phone FROM users;

“HTML टैग हटाएँ”

SELECT comment, REGEXP_REPLACE(comment, '<[^>]+>', '') AS clean_text FROM reviews;

REGEXP_REPLACE() के साथ, फ़ॉर्मेट रूपांतरण और डेटा सफ़ाई आसान हो जाती है.

3.5 सारांश

FunctionPurposeExample
REGEXP_LIKE()Check whether a value matches a regex patternSELECT * FROM users WHERE REGEXP_LIKE(email, '@gmail\.com$');
REGEXP_INSTR()Get the start position of the matched substringSELECT REGEXP_INSTR(email, '@') FROM users;
REGEXP_SUBSTR()Extract the matched substringSELECT REGEXP_SUBSTR(email, '@[a-zA-Z0-9.-]+') FROM users;
REGEXP_REPLACE()Replace the matched substringSELECT REGEXP_REPLACE(phone, '-', '') FROM users;

4. MySQL रेगुलर एक्सप्रेशन्स के व्यावहारिक उदाहरण

MySQL रेगुलर एक्सप्रेशन्स का उपयोग करके, आप वास्तविक दुनिया के डेटा प्रोसेसिंग कार्यों को सरल बना सकते हैं जैसे डेटा वैलिडेशन, विशिष्ट डेटा निकालना, और फ़ॉर्मेट रूपांतरण। इस अनुभाग में, हम SQL कोड और व्याख्याओं के साथ व्यावहारिक उपयोग मामलों को प्रस्तुत करते हैं.

4.1 ईमेल पता वैधता

अवलोकन

डेटाबेस में संग्रहीत ईमेल पतों की वैध फ़ॉर्मेट की जाँच करने के लिए रेगुलर एक्सप्रेशन्स का उपयोग करें.

उपयोग करने के लिए SQL

SELECT email FROM users 
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

व्याख्या

  • ^[a-zA-Z0-9._%+-]+@ से पहले एक या अधिक अल्फ़ान्यूमेरिक अक्षर, डॉट, अंडरस्कोर, या प्लस साइन
  • @[a-zA-Z0-9.-]+@ के बाद एक डोमेन नाम
  • \.[a-zA-Z]{2,}$ → कम से कम 2 अक्षरों वाले TLD (टॉप‑लेवल डोमेन) पर समाप्त होता है (जैसे .com, .jp, .net)

इस क्वेरी के साथ, आप अवैध ईमेल पतों को बाहर कर सकते हैं (उदाहरण के लिए user@@example.com, user@.com).

4.2 जापानी फ़ोन नंबर फ़ॉर्मेट की जाँच

अवलोकन

सामान्य जापानी फ़ोन नंबरों (जैसे 090-1234-5678, 03-1234-5678) की सही फ़ॉर्मेट की जाँच करें.

उपयोग करने के लिए SQL

SELECT phone FROM users 
WHERE phone REGEXP '^(0[789]0-[0-9]{4}-[0-9]{4}|0[1-9]-[0-9]{4}-[0-9]{4})$';

व्याख्या

  • 0[789]0-[0-9]{4}-[0-9]{4} → मोबाइल नंबर ( 090-xxxx-xxxx , 080-xxxx-xxxx आदि)
  • 0[1-9]-[0-9]{4}-[0-9]{4} → लैंडलाइन ( 03-xxxx-xxxx , 06-xxxx-xxxx आदि)

इस प्रकार, रेगुलर एक्सप्रेशन्स तब उपयोगी होते हैं जब फ़ॉर्मेट स्थिरता आवश्यक हो.

4.3 क्रेडिट कार्ड नंबर फ़ॉर्मेट वैधता

अवलोकन

क्रेडिट कार्ड नंबरों (विज़ा, मास्टरकार्ड, अमेरिकन एक्सप्रेस आदि) के फ़ॉर्मेट को वैध करें.

उपयोग करने के लिए SQL

SELECT card_number FROM payments 
WHERE card_number REGEXP '^(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$';

व्याख्या

  • ^4[0-9]{12}(?:[0-9]{3})?$ → विज़ा (16 अंक या 13 अंक)
  • ^5[1-5][0-9]{14}$ → मास्टरकार्ड (16 अंक)
  • ^3[47][0-9]{13}$ → अमेरिकन एक्सप्रेस (15 अंक)

इस क्वेरी के साथ, आप डेटाबेस में अवैध कार्ड नंबरों को फ़िल्टर कर सकते हैं (जैसे गलत लंबाई या अवैध शुरुआती अंक).

4.4 HTML टैग हटाना

अवलोकन

यदि उपयोगकर्ता द्वारा सबमिट किया गया डेटा HTML टैग्स रखता है, तो आप उन्हें हटा सकते हैं और सामग्री को सादा टेक्स्ट में बदल सकते हैं.

उपयोग करने के लिए SQL

SELECT REGEXP_REPLACE(comment, '<[^>]+>', '') AS clean_comment FROM reviews;

व्याख्या

  • '<[^>]+>'< और > के बीच सभी HTML टैग्स को हटाता है

उदाहरण

InputOutput
<b>Hello</b> World!Hello World!
<p>これはサンプルです</p>これはサンプルです

यह उपयोगकर्ता टिप्पणियों और ब्लॉग पोस्ट से HTML टैग हटाने के लिए उपयोगी है.

4.5 डाक कोड फ़ॉर्मेट वैधता (जापान)

अवलोकन

जपानी डाक कोड (जैसे 123-4567) की सही फ़ॉर्मेट की जाँच करें.

उपयोग करने के लिए SQL

SELECT postal_code FROM addresses 
WHERE postal_code REGEXP '^[0-9]{3}-[0-9]{4}$';

व्याख्या

  • ^[0-9]{3}-[0-9]{4}$“3 अंक-4 अंक” फ़ॉर्मेट में डाक कोड

इस रेगुलर एक्सप्रेशन का उपयोग करके डेटा स्थिरता बनाए रखी जा सकती है और गलत फ़ॉर्मेट को रोका जा सकता है.

4.6 उपयोगकर्ता नाम फ़िल्टरिंग (अस्वीकृत शब्दों का पता लगाना)

Check whether usernames contain disallowed words reserved for system use (e.g., admin, root, system) during registration.

उपयोग करने के लिए SQL

SELECT username FROM users 
WHERE username REGEXP 'admin|root|system';

व्याख्या

  • admin|root|system → इन शब्दों को शामिल करने वाले उपयोगकर्ता नामों का पता लगाता है

यह क्वेरी नियमित उपयोगकर्ताओं को सिस्टम प्रशासकों के लिए निर्धारित नामों का उपयोग करने से रोकने में मदद करती है

सारांश

  • रेगुलर एक्सप्रेशन का उपयोग ईमेल पते, फोन नंबर, और क्रेडिट कार्ड नंबरों की वैधता जांचने के लिए किया जा सकता है।
  • इन्हें HTML टैग हटाने और डेटा फ़ॉर्मेट बदलने के लिए भी लागू किया जा सकता है।
  • ये प्रतिबंधित शब्दों को फ़िल्टर करने और पोस्टल कोड की वैधता जांचने जैसे कार्यों के माध्यम से डेटाबेस की सुरक्षा और स्थिरता सुधारने में प्रभावी हैं।

5. रेगुलर एक्सप्रेशन का उपयोग करते समय महत्वपूर्ण विचार (प्रदर्शन और सुरक्षा)

MySQL में रेगुलर एक्सप्रेशन का उपयोग शक्तिशाली खोज और डेटा सफाई को सक्षम बनाता है। हालांकि, गलत उपयोग से प्रदर्शन में गिरावट और सुरक्षा जोखिम उत्पन्न हो सकते हैं। यह अनुभाग MySQL रेगुलर एक्सप्रेशन को सुरक्षित और कुशलता से उपयोग करने के प्रमुख विचारों को समझाता है।

5.1 रेगुलर एक्सप्रेशन के लिए प्रदर्शन अनुकूलन

MySQL रेगेक्स खोज सुविधाजनक है, लेकिन इसका एक नुकसान है: इंडेक्स आमतौर पर लागू नहीं होते, जिससे क्वेरी धीमी हो सकती है

प्रदर्शन सुधारने के उपाय

  1. LIKE या FULLTEXT इंडेक्स को संयोजित करें
    SELECT * FROM users WHERE email LIKE '%gmail.com';
    
  1. सरल रेगुलर एक्सप्रेशन का उपयोग करें
    SELECT * FROM users WHERE name REGEXP '^admin|admin$';
    
  1. पहले लक्ष्य डेटा को फ़िल्टर करें
    SELECT * FROM users WHERE email LIKE 'a%' AND email REGEXP '^[a-zA-Z0-9._%+-]+@gmail\.com$';
    

5.2 सुरक्षा जोखिम और प्रतिकार उपाय

1. रेगुलर एक्सप्रेशन DoS (ReDoS)

  • .* जैसे अनबाउंडेड मैच से बचें।
  • खोज सीमा को सीमित करने के लिए ^ और $ का उपयोग करें।
  • उपयोगकर्ता इनपुट को सीधे REGEXP में पास न करें।

2. SQL इंजेक्शन और रेगुलर एक्सप्रेशन

असुरक्षित क्वेरी

SELECT * FROM users WHERE username REGEXP '$input';

सुरक्षित क्वेरी (प्लेसहोल्डर का उपयोग करें)

$stmt = $pdo->prepare("SELECT * FROM users WHERE username REGEXP ?");
$stmt->execute([$sanitized_input]);

5.3 संस्करण संगतता

VersionMain Features
MySQL 5.xOnly the REGEXP operator is available
MySQL 8.xAdds REGEXP_LIKE(), REGEXP_INSTR(), REGEXP_SUBSTR(), and REGEXP_REPLACE()

सारांश

  • क्योंकि REGEXP इंडेक्स का उपयोग नहीं करता, प्रदर्शन उपाय महत्वपूर्ण हैं।
  • ReDoS (रेगुलर एक्सप्रेशन DoS) को रोकने के लिए वाइल्डकार्ड का अत्यधिक उपयोग न करें।
  • SQL इंजेक्शन को रोकने के लिए उपयोगकर्ता इनपुट को सीधे REGEXP में लागू न करें।

6. अक्सर पूछे जाने वाले प्रश्न (FAQ)

यहाँ MySQL रेगुलर एक्सप्रेशन (REGEXP) के उपयोग से संबंधित सामान्य प्रश्न हैं। इन मुद्दों को हल करने से आप रेगेक्स का अधिक प्रभावी उपयोग कर पाएँगे।


6.1 MySQL में मैं कौन से रेगेक्स पैटर्न उपयोग कर सकता हूँ?

SymbolDescriptionExampleResult
.Any single charactera.c"abc", "aac", "adc"
^Start of the string^abc"abcde" (does not match "dabc")
$End of the stringxyz$"axyz" (does not match "xyzb")
[]Any of the specified characters[abc]"a", "b", "c"
[^]Any character not in the specified set[^abc]Any character except "a", "b", "c"
*Repeat the preceding character 0 or more timesa*"", "a", "aa", "aaa"
+Repeat the preceding character 1 or more timesa+"a", "aa", "aaa" (does not match "")

6.2 LIKE और REGEXP में क्या अंतर है?

ComparisonLIKEREGEXP
FunctionalitySimple pattern matchingSearching with complex regular expressions
Wildcards% (any string), _ (any single character).* (any string), ^, $, [a-z], etc.
Search speedFast because indexes can applyOften slower due to full table scans
Use casesSimple searches (contains, prefix matching, etc.)Complex searches based on specific patterns

क्योंकि LIKE तेज़ है, सरल खोजों के लिए LIKE को प्राथमिकता दें और जटिल मिलान की आवश्यकता होने पर REGEXP का उपयोग करें।

6.3 MySQL 5.x और MySQL 8.x के बीच रेगेक्स सुविधाओं में क्या अंतर हैं?

VersionMain Features
MySQL 5.xOnly the REGEXP operator is available
MySQL 8.xAdds REGEXP_LIKE(), REGEXP_INSTR(), REGEXP_SUBSTR(), and REGEXP_REPLACE()

6.4 यदि कोई रेगेक्स अपेक्षित रूप से काम नहीं करता तो मुझे क्या करना चाहिए?

चेकलिस्ट

  1. जाँचें कि एस्केपिंग सही है या नहीं
    SELECT * FROM users WHERE email REGEXP '\.com$';
    
  1. REGEXP_LIKE() के साथ i फ़्लैग आज़माएँ
    SELECT * FROM users WHERE REGEXP_LIKE(username, 'admin', 'i');
    
  1. डेटा एन्कोडिंग जाँचें
    SHOW VARIABLES LIKE 'character_set_database';
    

6.5 REGEXP क्वेरीज़ के प्रदर्शन को कैसे सुधारें?

  1. LIKE के साथ पूर्व-फ़िल्टर करें
    SELECT * FROM users 
    WHERE email LIKE '%gmail.com' 
    AND email REGEXP '^[a-zA-Z0-9._%+-]+@gmail\.com$';
    
  1. जहाँ उपयुक्त हो, इंडेक्स का उपयोग करें
    ALTER TABLE users ADD FULLTEXT(email);
    

सारांश

  • REGEXP LIKE से अधिक शक्तिशाली है, लेकिन आपको प्रदर्शन के बारे में सतर्क रहना चाहिए।
  • MySQL 8.0 में, नए regex फ़ंक्शन (जैसे REGEXP_LIKE()) जोड़े गए, जिससे अधिक लचीला प्रोसेसिंग संभव हुआ।
  • प्रदर्शन सुधारने के लिए: LIKE के साथ संयोजन करें, इंडेक्स का उपयोग करें, और सरल regex पैटर्न डिज़ाइन करें।

7. Summary

MySQL नियमित अभिव्यक्तियाँ (REGEXP) डेटा खोज, वैधता, और फ़ॉर्मेट रूपांतरण के लिए अत्यंत उपयोगी हैं। इस लेख में MySQL regex मूलभूत, MySQL 8.0 और बाद में जोड़े गए नए फीचर, व्यावहारिक उदाहरण, महत्वपूर्ण विचार, और FAQs कवर किए गए हैं।

7.1 Key Takeaways

यहाँ सबसे महत्वपूर्ण बिंदुओं का त्वरित सारांश है।

1. MySQL Regular Expression Basics

  • Using the REGEXP operator enables more flexible pattern matching than LIKE .
  • Common regex patterns
  • ^ (शुरुआत), $ (अंत), . (कोई भी एकल अक्षर), [] (अक्षर वर्ग), + (एक या अधिक दोहराव), आदि.

2. New Regular Expression Functions in MySQL 8.0+

MySQL 8.0 में, ये चार फ़ंक्शन जोड़े गए, जिससे अधिक लचीला प्रोसेसिंग संभव हुआ:

  • REGEXP_LIKE() : REGEXP ऑपरेटर का एक विकल्प
  • REGEXP_INSTR() : मिलते हुए उपस्ट्रिंग की प्रारंभिक स्थिति प्राप्त करता है
  • REGEXP_SUBSTR() : मिलते हुए उपस्ट्रिंग को निकालता है
  • REGEXP_REPLACE() : regex का उपयोग करके उपस्ट्रिंग को बदलता है

3. Practical Examples

  • ईमेल पता सत्यापन
  • फ़ोन नंबर और क्रेडिट कार्ड नंबर जांच
  • HTML टैग हटाना
  • डाक कोड फ़ॉर्मेट सत्यापन
  • अस्वीकृत शब्दों का पता लगाना
  • डेटा सफाई (व्हाइटस्पेस ट्रिम करना, कॉमा हटाना, आदि)

4. Important Considerations When Using Regular Expressions

  • Performance optimization
  • क्योंकि REGEXP इंडेक्स का उपयोग नहीं करता, यह पूर्ण तालिका स्कैन का कारण बन सकता है।
  • आप LIKE या FULLTEXT इंडेक्स को संयोजित करके प्रदर्शन सुधार सकते हैं।
  • Security measures
  • ReDoS (Regular Expression DoS) को रोकने के लिए, .* का अत्यधिक उपयोग न करें।
  • SQL injection को रोकने के लिए, placeholders का उपयोग करें।

5. FAQ (Frequently Asked Questions)

  • MySQL में उपलब्ध regex पैटर्न
  • LIKE और REGEXP के बीच अंतर
  • MySQL 5.x और 8.x के फीचर अंतर
  • जब regex अपेक्षित रूप से काम नहीं करता तो समस्या निवारण
  • प्रदर्शन सुधारने के तरीके

7.2 Best Practices for Using Regular Expressions

  1. Keep regex patterns simple
  • Example: Avoid overusing .* and make use of ^ (start) and $ (end).
  1. Combine with LIKE or FULLTEXT where appropriate
  • Pre-filter with LIKE , then apply REGEXP to reduce query cost.
  1. Use REGEXP_REPLACE() for data cleaning
  • Example: Remove HTML tags and normalize unnecessary spaces.
  1. Take advantage of MySQL 8.0 and later
  • Using new functions such as REGEXP_LIKE() can make SQL more readable.
  1. Apply security measures thoroughly
  • Do not apply user input directly to REGEXP (SQL injection prevention).
  • Use placeholders for dynamic queries.

7.3 Resources for Further Learning

यहाँ कुछ संदर्भ हैं जो आपको MySQL नियमित अभिव्यक्तियों को गहराई से सीखने में मदद करेंगे।

Official Documentation

7.4 Final Notes

MySQL नियमित अभिव्यक्तियों का उपयोग कई स्थितियों में किया जा सकता है, जैसे डेटा खोज, सफाई, और वैधता। हालांकि, प्रदर्शन और सुरक्षा विचारों को समझते हुए उनका उचित उपयोग करना महत्वपूर्ण है।

हमें आशा है कि यह लेख MySQL नियमित अभिव्यक्तियों के साथ काम करते समय आपकी मदद करेगा। इन तकनीकों को अपने प्रोजेक्ट्स में लागू करने का प्रयास करें!