MYSQL नियमित अभिव्यक्तियाँ (REGEXP) वाक्यविन्यास और उदाहरणों के साथ

नियमित अभिव्यक्तियाँ क्या हैं?

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

मूल वाक्यविन्यास

नियमित अभिव्यक्ति के लिए मूल सिंटैक्स इस प्रकार है

SELECT statements... WHERE fieldname REGEXP 'pattern';

यहाँ -

  • “चयन कथन…” मानक है चयन कथन
  • “WHERE फ़ील्डनाम” वह कॉलम का नाम है जिस पर नियमित अभिव्यक्ति निष्पादित की जानी है।
  • “REGEXP 'पैटर्न'” REGEXP नियमित अभिव्यक्ति ऑपरेटर है और 'पैटर्न' REGEXP द्वारा मिलान किये जाने वाले पैटर्न का प्रतिनिधित्व करता है। आरलाइक विश्व का सबसे लोकप्रिय एंव REGEXP का समानार्थी शब्द और REGEXP के समान ही परिणाम प्राप्त करता है। LIKE ऑपरेटर के साथ इसे भ्रमित होने से बचाने के लिए, यह REGEXP का उपयोग करना बेहतर है बजाय.

आइये अब एक व्यावहारिक उदाहरण देखें-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

उपरोक्त क्वेरी उन सभी मूवी टाइटल को खोजती है जिनमें कोड शब्द है। इससे कोई फर्क नहीं पड़ता कि “कोड” शीर्षक के आरंभ में है, बीच में है या अंत में है। जब तक यह शीर्षक में समाहित है, तब तक इसे माना जाएगा।

मान लीजिए कि हम ऐसी मूवी खोजना चाहते हैं जो a, b, c या d से शुरू होती हैं, उसके बाद कोई भी अन्य अक्षर हो, तो हम इसे कैसे प्राप्त करेंगे। हम अपने इच्छित परिणाम प्राप्त करने के लिए मेटाकैरेक्टर के साथ एक रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं।

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL कार्यक्षेत्र myflixdb के विरुद्ध हमें निम्नलिखित परिणाम प्राप्त होते हैं।

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

आइए अब उपरोक्त परिणाम के लिए जिम्मेदार हमारे नियमित अभिव्यक्ति पर बारीकी से नज़र डालें।

'^[abcd]' कैरेट (^) का अर्थ है कि पैटर्न मिलान को शुरुआत में लागू किया जाना चाहिए और चारलिस्ट [abcd] का अर्थ है कि केवल a, b, c या d से शुरू होने वाले मूवी शीर्षक ही हमारे परिणाम सेट में लौटाए जाते हैं।

आइए अपनी उपरोक्त स्क्रिप्ट को संशोधित करें और NOT charlist का उपयोग करें और देखें कि हमारी क्वेरी निष्पादित करने के बाद हमें क्या परिणाम मिलेंगे।

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL वर्कबेंच को मायफ्लिक्सडीबी के विरुद्ध चलाने से हमें निम्नलिखित परिणाम प्राप्त होते हैं।

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

आइए अब उपरोक्त परिणामों के लिए जिम्मेदार हमारे नियमित अभिव्यक्ति पर बारीकी से नज़र डालें।

'^[^abcd]' कैरेट (^) का अर्थ है कि पैटर्न मिलान को शुरुआत में लागू किया जाना चाहिए और चारलिस्ट [^abcd] का अर्थ है कि किसी भी संलग्न वर्ण से शुरू होने वाले मूवी शीर्षक को परिणाम सेट से बाहर रखा गया है।

नियमित अभिव्यक्ति मेटाअक्षर

ऊपर दिए गए उदाहरण में हमने जो देखा वह रेगुलर एक्सप्रेशन का सबसे सरल रूप है। आइए अब ज़्यादा एडवांस रेगुलर एक्सप्रेशन पैटर्न मैच देखें। मान लीजिए कि हम सिर्फ़ रेगुलर एक्सप्रेशन का इस्तेमाल करके पैटर्न “कोड” से शुरू होने वाले मूवी टाइटल को खोजना चाहते हैं, तो हम इसे कैसे करेंगे? इसका जवाब है मेटाकैरेक्टर। वे हमें रेगुलर एक्सप्रेशन का इस्तेमाल करके अपने पैटर्न सर्च नतीजों को बेहतर बनाने की अनुमति देते हैं।

चार विवरण उदाहरण
* RSI तारांकन (*) मेटाकैरेक्टर का उपयोग उसके पहले के स्ट्रिंग्स के शून्य (0) या अधिक उदाहरणों से मिलान करने के लिए किया जाता है SELECT * FROM movies WHERE title REGEXP 'da*'; “da” अक्षर वाली सभी फिल्में देगा। उदाहरण के लिए, दा विंची कोड, डैडीज़ लिटिल गर्ल्स।
+ RSI प्लस (+) मेटाकैरेक्टर का उपयोग उसके पहले के एक या अधिक स्ट्रिंग्स के उदाहरणों से मिलान करने के लिए किया जाता है। SELECT * FROM `movies` WHERE `title` REGEXP 'mon+'; "मोन" अक्षर वाली सभी फिल्में देगा। उदाहरण के लिए, एन्जिल्स और डेमन्स।
? प्रश्न(?) मेटाकैरेक्टर का उपयोग उसके पहले के स्ट्रिंग्स के शून्य (0) या एक इंस्टैंस से मिलान करने के लिए किया जाता है। SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; com स्ट्रिंग वाली सभी श्रेणियां देगा। उदाहरण के लिए, कॉमेडी, रोमांटिक कॉमेडी।
. RSI डॉट (.) मेटाकैरेक्टर का उपयोग किसी नई पंक्ति को छोड़कर किसी भी एकल वर्ण से मिलान करने के लिए किया जाता है। SELECT * FROM movies WHERE `year_released` REGEXP '200.'; “200” अक्षर से शुरू होने वाले वर्षों में रिलीज़ हुई सभी फिल्में उसके बाद कोई भी एक अक्षर देंगी। उदाहरण के लिए, 2005,2007,2008 आदि।
[एबीसी] RSI चारलिस्ट [एबीसी] किसी भी संलग्न वर्ण से मिलान करने के लिए उपयोग किया जाता है। SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'; "vwxyz" में कोई भी एकल वर्ण वाली सभी फिल्में मिलेंगी। उदाहरण के लिए, एक्स-मेन, दा विंची कोड, आदि।
[^एबीसी] RSI चारलिस्ट [^abc] इसका उपयोग संलग्न वर्णों को छोड़कर किसी भी वर्ण का मिलान करने के लिए किया जाता है। SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; “vwxyz” के अलावा अन्य पात्रों वाली सभी फिल्में देगा।
[AZ] RSI [AZ] किसी भी बड़े अक्षर से मिलान करने के लिए प्रयोग किया जाता है। SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; उन सभी सदस्यों को दिया जाएगा जिनके डाक पते में A से Z तक कोई भी अक्षर होगा। उदाहरण के लिए, सदस्यता संख्या 1 वाली जेनेट जोन्स।
[az] RSI [az] किसी भी छोटे अक्षर से मिलान करने के लिए उपयोग किया जाता है SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; उन सभी सदस्यों को देगा जिनके डाक पते में a से z तक कोई भी वर्ण है। उदाहरण के लिए, सदस्यता संख्या 1 वाली जेनेट जोन्स।
[0 - 9] RSI [0 - 9] इसका उपयोग 0 से 9 तक किसी भी अंक का मिलान करने के लिए किया जाता है। SELECT * FROM `members` WHERE `contact_number` REGEXP '[0-9]' सभी सदस्यों को “[0-9]” वर्ण वाले संपर्क नंबर सबमिट किए जाएंगे। उदाहरण के लिए, रॉबर्ट फिल।
^ RSI कैरेट (^) मैच को शुरू में शुरू करने के लिए प्रयोग किया जाता है। SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; यह उन सभी फिल्मों को दिखाता है जिनके शीर्षक “cd” के किसी भी अक्षर से शुरू होते हैं। उदाहरण के लिए, कोड नेम ब्लैक, डैडीज़ लिटिल गर्ल्स और दा विंची कोड।
| RSI ऊर्ध्वाधर पट्टी (|) इसका उपयोग विकल्पों को अलग करने के लिए किया जाता है। SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; “cd” या “u” में से किसी भी अक्षर से शुरू होने वाले शीर्षक वाली सभी फिल्में देता है। उदाहरण के लिए, कोड नेम ब्लैक, डैडीज़ लिटिल गर्ल, दा विंची कोड और अंडरवर्ल्ड – Awakenआईएनजी.
[[:<:]] RSI[[:<:]] शब्दों की शुरुआत से मेल खाता है. SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for';

सभी फ़िल्मों के शीर्षक पात्रों से शुरू होते हैं। उदाहरण के लिए: सारा मार्शल को भूलना।

[[:>:]] RSI [[:>:]] शब्दों के अंत से मेल खाता है. SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';

“ack” अक्षर से समाप्त होने वाले शीर्षक वाली सभी फ़िल्में देता है

उदाहरण के लिए, कोड नाम ब्लैक.

[:कक्षा:] RSI [:कक्षा:] एक वर्ण वर्ग से मेल खाता है यानी

[: अल्फा:] अक्षरों का मिलान करने के लिए, [:स्थान:] सफेद स्थान से मिलान करने के लिए, [: पंच:] विराम चिह्नों का मिलान करें और उच्च श्रेणी के अक्षरों के लिए [:upper:] का प्रयोग करें।

SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';

सभी फ़िल्मों के शीर्षक में केवल अक्षर होते हैं

उदाहरण के लिए, फॉरगेटिंग सारा मार्शल, एक्स-मेन आदि।

इस क्वेरी से पाइरेट्स ऑफ द कैरेबियन 4 जैसी फिल्म को छोड़ दिया जाएगा।

बैकस्लैश (\) का उपयोग एस्केप कैरेक्टर के रूप में किया जाता है। यदि हम इसे रेगुलर एक्सप्रेशन में पैटर्न के भाग के रूप में उपयोग करना चाहते हैं, तो हमें डबल बैकस्लैश (\\) का उपयोग करना चाहिए।

सारांश

  • नियमित अभिव्यक्तियाँ एक शक्तिशाली और लचीला पैटर्न मिलान प्रदान करती हैं जो हमारी डेटाबेस प्रणालियों के लिए शक्तिशाली खोज उपयोगिताओं को क्रियान्वित करने में हमारी सहायता कर सकती हैं।
  • REGEXP वह ऑपरेटर है जिसका उपयोग रेगुलर एक्सप्रेशन पैटर्न मैच करते समय किया जाता है। RLIKE इसका पर्यायवाची है
  • नियमित अभिव्यक्तियाँ अनेक मेटाकैरेक्टरों का समर्थन करती हैं, जो पैटर्न मिलान करते समय अधिक लचीलेपन और नियंत्रण की अनुमति देती हैं।
  • बैकस्लैश का उपयोग रेगुलर एक्सप्रेशन में एस्केप कैरेक्टर के रूप में किया जाता है। इसे पैटर्न मैच में तभी शामिल किया जाता है जब डबल बैकस्लैश का उपयोग किया गया हो।
  • नियमित अभिव्यक्तियाँ केस-सेंसिटिव नहीं होतीं।