सिंटेक्स के साथ MYSQL रेगुलर एक्सप्रेशंस (REGEXP); उदाहरण

Anonim

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

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

मूल वाक्य रचना

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

SELECT statements… WHERE fieldname REGEXP 'pattern';

यहां -

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

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

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

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

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

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 कार्यक्षेत्र में उपरोक्त स्क्रिप्ट को Myflixdb के खिलाफ निष्पादित करने से हमें निम्नलिखित परिणाम मिलते हैं।

 
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] का अर्थ है कि किसी भी संलग्न अक्षर के साथ शुरू होने वाली फिल्म का शीर्षक परिणाम सेट से बाहर रखा गया है।

नियमित अभिव्यक्ति रूपक

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

चार विवरण उदाहरण
* तारांकित (*) metacharacter तार यह पूर्ववर्ती की शून्य (0) या अधिक उदाहरण मिलान करने के लिए प्रयोग किया जाता है फिल्मों का चयन करें * जहाँ से REGEXP 'दा *' शीर्षक; सभी फ़िल्में देंगे जिनमें "दा"। एफएआर उदाहरण हैं, दा विंची कोड, डैडीज़ लिटिल गर्ल्स हैं।
+ प्लस (+) metacharacter यह पूर्ववर्ती तार के एक से अधिक मैच के लिए प्रयोग किया जाता है। का चयन करें * फिल्मों से * `कहाँ` शीर्षक `REGEXP 'मोन +'; सभी फ़िल्में देंगे जिनमें "मोन"। एफआर उदाहरण हैं, एन्जिल्स और डीमन्स।
? प्रश्न (?) मेटाचैकर का उपयोग शून्य (0) से मेल खाने के लिए किया जाता है या इसके पूर्व के एक उदाहरण से। का चयन करें * से `श्रेणियों` जहां `श्रेणी_नाम` REGEXP 'कॉम?'; स्ट्रिंग कॉम वाली सभी श्रेणियां देगा। उदाहरण के लिए, कॉमेडी, रोमांटिक कॉमेडी।
बिंदु (।) Metacharacter प्रयोग किया जाता है एक नई लाइन के अपवाद में किसी भी एक वर्ण से मेल करने के। का चयन करें * फिल्मों से जहां `year_released` REGEXP '200.'; वर्षों में रिलीज़ होने वाली सभी फ़िल्मों को "200" अक्षर से शुरू किया जाएगा, इसके बाद किसी भी एक चरित्र के लिए। उदाहरण के लिए, 2005,2007,2004 आदि।
[एबीसी] Charlist [abc] संलग्न वर्णों के किसी भी मैच के लिए प्रयोग किया जाता है। का चयन करें * से 'फिल्में' जहां `शीर्षक` REGEXP '[vwxyz]; "vwxyz" में किसी भी एकल चरित्र वाली सभी फिल्में देगा। उदाहरण के लिए, X- मेन, दा विंची कोड, आदि।
[abc] Charlist [abc] संलग्न लोगों को छोड़कर कोई भी वर्ण मैच के लिए प्रयोग किया जाता है। का चयन करें * से 'फिल्में' जहां `शीर्षक` REGEXP '[vwxyz]'; "vwxyz" में लोगों के अलावा अन्य सभी वर्ण वाली फिल्में देगा।
[AZ] [AZ] किसी भी अपर केस अक्षर मैच के लिए प्रयोग किया जाता है। का चयन करें * से `सदस्यों` जहां `पोस्टल_ड्रेस` REGEXP '[AZ]'; सभी सदस्यों को एक से जेड तक किसी भी चरित्र वाले डाक पते देंगे ... उदाहरण के लिए, सदस्यता नंबर 1 के साथ जेनेट जोन्स।
[az] [Az] किसी भी लोअर केस अक्षर मैच के लिए प्रयोग किया जाता है का चयन करें * सदस्यों से `` जहां `पोस्टल_ड्रेस` REGEXP '[az]'; सभी सदस्यों को एक से z से किसी भी वर्ण वाले डाक पते देंगे ... उदाहरण के लिए, सदस्यता नंबर 1 के साथ जेनेट जोन्स।
[0-9] [0-9] से 9 तक के माध्यम से 0 से किसी भी अंकों मिलान करने के लिए प्रयोग किया जाता है। चयन करें * से 'सदस्यों' जहां `contact_number` REGEXP '[0-9]' सभी सदस्यों को पात्रों से संपर्क नंबर प्रस्तुत किया है" [0-9] "होगा। उदाहरण के लिए, रॉबर्ट फिल।
^ कैरेट (^) शुरुआत में मैच शुरू करने के लिए प्रयोग किया जाता है। का चयन करें * से 'फिल्में' जहां `शीर्षक` REGEXP '[सीडी]; सभी फिल्मों को "सीडी" में किसी भी पात्र के साथ शुरू होने वाली शीर्षक के साथ देता है। उदाहरण के लिए, कोड नाम ब्लैक, डैडीज लिटिल गर्ल्स और दा विंची कोड।
| लंबवत बार (|) अलग विकल्प किया जाता है। का चयन करें "cd" या "u" .for में से किसी भी अक्षर से शुरू होने वाले शीर्षक के साथ सभी फिल्में देता है। उदाहरण के लिए, कोड नाम काला, डैडी की छोटी लड़की, दा विंची कोड और अंडरवर्ल्ड - जागृति।
[[: <:]] [[: <:]] शब्द की शुरुआत से मेल खाता है। चयन करें * से 'फिल्में' जहां `शीर्षक` REGEXP '[[: <:]] के लिए; पात्रों के साथ शुरू होने वाले शीर्षकों के साथ सभी फिल्में देता है। उदाहरण के लिए: सारा मार्शल को भूल जाना।
[[:>:]] [[:>:]] शब्द के अंत से मेल खाता है। का चयन करें * से 'फिल्मों' जहां `शीर्षक` REGEXP 'ack [[:>:]]; सभी फिल्मों को शीर्षक "ack" के साथ समाप्त होने वाली फिल्में देता है। उदाहरण के लिए, कोड का नाम काला।
[:कक्षा:] [: वर्ग:] एक चरित्र वर्ग यानी मेल खाता [: अल्फा:] मैच के लिए पत्र, [: अंतरिक्ष:] [: punct:] सफेद स्थान, मैच के लिए है मैच विराम चिह्न और [: ऊपरी:] उच्च वर्ग के पत्र के लिए। का चयन करें * से 'फिल्में' जहां `शीर्षक` REGEXP '[: अल्फा:]; टाइटल वाली सभी फिल्मों में केवल अक्षर होते हैं। उदाहरण के लिए, सारा मार्शल, एक्स-मेन आदि को भूलकर पाइरेट्स ऑफ द कैरेबियन 4 जैसी मूवी को इस क्वेरी द्वारा छोड़ दिया जाएगा।

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

सारांश

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