Regular Expressionsरेगुलर एक्सप्रेशन के साथ शुरुआत करना


टिप्पणियों

कई प्रोग्रामर के लिए रेगेक्स कुछ प्रकार की जादुई तलवार है जो वे किसी भी प्रकार की पाठ पार्सिंग स्थिति को हल करने के लिए फेंकते हैं। लेकिन इस उपकरण का कुछ भी नहीं जादुई है, और भले ही यह यह क्या करता है पर बहुत अच्छा है, यह एक पूर्ण विशेषताओं प्रोग्रामिंग भाषा (यानी यह ट्यूरिंग-पूर्ण नहीं है) नहीं है।

'नियमित अभिव्यक्ति' का क्या अर्थ है?

नियमित अभिव्यक्तियाँ एक नियमित व्याकरण द्वारा परिभाषित भाषा को व्यक्त करती हैं जिसे एक नॉनडेर्मिनिस्टिक परिमित ऑटोमोटन (एनएफए) द्वारा हल किया जा सकता है, जहां मिलान राज्यों द्वारा दर्शाया जाता है।

एक नियमित व्याकरण सबसे सरल व्याकरण है जैसा कि चॉम्स्की हायरार्की द्वारा व्यक्त किया गया है।

चॉम्स्की का पदानुक्रम

सीधे शब्दों में, एक नियमित भाषा नेत्रहीन रूप से व्यक्त की जाती है जो एनएफए व्यक्त कर सकती है और यहां एनएफए का एक बहुत ही सरल उदाहरण है:

एनएफए का उदाहरण

और रेगुलर एक्सप्रेशन लैंग्वेज इस तरह के ऑटोमेटन का एक पाठीय प्रतिनिधित्व है। वह अंतिम उदाहरण निम्नलिखित रेगेक्स द्वारा व्यक्त किया गया है:

^[01]*1$

जो 0 या 1 साथ किसी भी स्ट्रिंग की शुरुआत कर 1 , 0 या अधिक बार दोहरा रहा है, जो 1 साथ समाप्त होता है। दूसरे शब्दों में, उनके द्विआधारी प्रतिनिधित्व से विषम संख्याओं का मिलान करना एक regex है।

क्या सभी रेगेक्स वास्तव में एक नियमित व्याकरण हैं?

वास्तव में वे नहीं हैं। कई रेगेक्स इंजनों में सुधार हुआ है और वे पुश-डाउन ऑटोमेटा का उपयोग कर रहे हैं, जो स्टैक अप कर सकते हैं, और नीचे चल रही जानकारी को पॉप कर सकते हैं। उन ऑटोमेटा ने परिभाषित किया कि चॉम्स्की के पदानुक्रम में संदर्भ-मुक्त व्याकरण कहा जाता है । गैर-नियमित रेगेक्स में सबसे विशिष्ट उपयोग, कोष्ठक मिलान के लिए पुनरावर्ती पैटर्न का उपयोग है।

निम्नलिखित की तरह एक पुनरावर्ती regex (जो कोष्ठक से मेल खाता है) इस तरह के कार्यान्वयन का एक उदाहरण है:

{((?>[^\(\)]+|(?R))*)}

(यह उदाहरण अजगर के re इंजन के साथ काम नहीं करता है, लेकिन regex इंजन के साथ, या पीसीआरई इंजन के साथ )।

साधन

रेगुलर एक्सप्रेशंस के पीछे के सिद्धांत के बारे में अधिक जानकारी के लिए, आप एमआईटी द्वारा उपलब्ध कराए गए निम्नलिखित पाठ्यक्रमों का उल्लेख कर सकते हैं:

जब आप जटिल रेगेक्स लिख रहे हैं या डिबग कर रहे हैं, तो ऑनलाइन टूल हैं जो डीबगएक्स साइट की तरह ऑटोमेटन के रूप में रेजेक्स को कल्पना करने में मदद कर सकते हैं।

संस्करण

PCRE

संस्करण रिहा
2 2015-01-05
1 1997/06/01

इनके द्वारा उपयोग किया जाता है: PHP 4.2.0 (और उच्चतर), डेल्फी एक्सई (और उच्चतर), जूलिया , नोटपैड ++

पर्ल

संस्करण रिहा
1 1987/12/18
2 1988/06/05
3 1989/10/18
4 1991/03/21
5 1994/10/17
6 2009-07-28

नेट

संस्करण रिहा
1 2002/02/13
4 2010-04-12

भाषाएँ: C #

जावा

संस्करण रिहा
4 2002/02/06
5 2004/10/04
7 2011-07-07
SE8 2014-03-18

जावास्क्रिप्ट

संस्करण रिहा
1.2 1997/06/11
1.8.5 2010-07-27

अजगर

संस्करण रिहा
1.4 1996/10/25
2.0 2000/10/16
3.0 2008/12/03
3.5.2 2016/06/07

Oniguruma

संस्करण रिहा
प्रारंभिक 2002/02/25
5.9.6 2014-12-12
Onigmo 2015-01-20

बढ़ावा

संस्करण रिहा
0 1999/12/14
1.61.0 2016/05/13

POSIX

संस्करण रिहा
BRE 1997/01/01
ERE 2008-01-01

भाषाएँ: बैश

चरित्र गाइड

ध्यान दें कि कुछ सिंटैक्स तत्वों का अभिव्यक्ति के आधार पर अलग व्यवहार होता है।

वाक्य - विन्यास विवरण
? 0 या 1 बार पूर्ववर्ती वर्ण या उपसर्ग का मिलान करें। गैर-कैप्चरिंग समूहों के लिए भी उपयोग किया जाता है, और कैप्चरिंग समूहों का नाम दिया गया है।
* पूर्ववर्ती वर्ण या उपप्रकार 0 या अधिक बार मिलान करें।
+ 1 या उससे अधिक बार पूर्ववर्ती वर्ण या उपसर्ग का मिलान करें।
{n} पूर्ववर्ती वर्ण या उपसर्ग का मिलान बिल्कुल n बार करें।
{min,} पूर्ववर्ती चरित्र या उपप्रकार मिनट या अधिक बार मिलान करें।
{,max} पूर्ववर्ती चरित्र या उपप्रकार के अधिकतम या कम समय का मिलान करें।
{min,max} पूर्ववर्ती चरित्र या उपप्रकार से कम से कम न्यूनतम बार मिलान करें लेकिन max समय से अधिक नहीं।
- जब वर्ग कोष्ठक के बीच में संकेत दिया to ; उदाहरण के लिए [3-6] अक्षर 3, 4, 5 या 6 से मेल खाते हैं।
^ स्ट्रिंग की शुरुआत (या मल्टीलाइन /m विकल्प निर्दिष्ट होने पर लाइन की शुरुआत), या विकल्पों की सूची को नकारती है (अर्थात यदि वर्ग कोष्ठक के भीतर [] )
$ स्ट्रिंग का अंत (या बहुस्तरीय /m विकल्प निर्दिष्ट होने पर एक पंक्ति का अंत)।
( ... ) समूह उपमेक्शन्स, विशेष चर ( \1 , \2 , आदि) में मेल खाने वाली सामग्री को कैप्चर करते हैं, जिन्हें बाद में उसी रेगेक्स के भीतर इस्तेमाल किया जा सकता है, उदाहरण के लिए (\w+)\s\1\s शब्द दोहराव से मेल खाता है
(?<name> ... ) समूह सबटेक्शन्स, और उन्हें एक नामित समूह में कैप्चर करता है
(?: ... ) कैप्चरिंग के बिना समूह के सबएक्सप्रेस
. लाइन विराम ( \n , और आमतौर पर \r ) को छोड़कर किसी भी वर्ण से मेल खाता है।
[ ... ] इन कोष्ठकों के बीच किसी भी वर्ण का मिलान एक बार किया जाना चाहिए। एनबी: ^ खुले ब्रैकेट का अनुसरण करने से यह प्रभाव कम हो जाता है। - कोष्ठक के अंदर होने से कई प्रकार के मान निर्दिष्ट किए जा सकते हैं (जब तक कि यह पहला या अंतिम वर्ण न हो, जिस स्थिति में यह सिर्फ एक नियमित डैश का प्रतिनिधित्व करता है)।
\ निम्नलिखित चरित्र से बच निकलता है। मेटा सीक्वेंस में भी उपयोग किया जाता है - विशेष अर्थ के साथ रेगेक्स टोकन।
\$ डॉलर (यानी एक विशेष पात्र बच गया)
\( खुला कोष्ठक (यानी एक विशेष चरित्र बच गया)
\) करीब कोष्ठक (यानी एक विशेष चरित्र बच गया)
\* तारांकन चिह्न (यानी एक विशेष पात्र बच गया)
\. डॉट (यानी एक विशेष पात्र बच गया)
\? प्रश्न चिह्न (यानी एक विशेष पात्र बच गया)
\[ बाएं (खुला) चौकोर कोष्ठक (यानी एक विशेष पात्र बच गया)
\\ बैकस्लैश (यानी एक विशेष पात्र बच गया)
\] दायां (पास) वर्गाकार कोष्ठक (यानी एक विशेष पात्र बच गया)
\^ कैरेट (यानी एक विशेष पात्र बच गया)
\{ बाएँ (खुले) घुंघराले ब्रैकेट / ब्रेस (यानी एक विशेष पात्र बच गया)
\| पाइप (यानी एक विशेष पात्र बच गया)
\} दाएं (करीब) घुंघराले ब्रैकेट / ब्रेस (यानी एक विशेष चरित्र बच गया)
\+ प्लस (यानी एक विशेष पात्र बच गया)
\A एक स्ट्रिंग की शुरुआत
\Z एक तार का अंत
\z एक तार के निरपेक्ष
\b शब्द (अल्फ़ान्यूमेरिक अनुक्रम) सीमा
\1 , \2 , आदि। पहले से मिलान किए गए उप-संदर्भों का बैक-रेफरेंस, द्वारा समूहीकृत () , \1 अर्थ है पहला मैच, \2 अर्थ है दूसरा मैच आदि।
[\b] बैकस्पेस - जब \b वर्ण वर्ग के अंदर होता है ( [] ) बैकस्पेस से मेल खाता है
\B नेगेटिव \b - दो-शब्द वर्णों के बीच किसी भी स्थिति में और साथ ही दो गैर-शब्द वर्णों के बीच किसी भी स्थिति से मेल खाता है
\D गैर-अंक
\d अंक
\e पलायन
\f भोजन की शैली
\n रेखा भरण
\r कैरिज रिटर्न
\S गैर सफेद-अंतरिक्ष
\s सफेद-अंतरिक्ष
\t टैब
\v ऊर्ध्वाधर टैब
\W गैर शब्द
\w शब्द (यानी अल्फ़ान्यूमेरिक वर्ण)
{ } नामित चरित्र सेट
| या; पूर्व और पूर्ववर्ती विकल्पों को चित्रित करता है।