रेग्युलर ऍक्सप्रैशन

मुक्त ज्ञानकोश विकिपीडिया से

नियमित व्यंजक या रेग्युलर ऍक्सप्रैशन कम्प्यूटिंग में स्ट्रिंग्स की खोज (find) या खोजो-और-बदलो (find and replace) के लिए संक्षिप्त, लचीला और सुविधाजनक तरीका है। उदाहरण के लिये कम[लर] खोजने पर यह कमल को भी खोजेगा और कमर को भी। रेग्युलर ऍक्सप्रैशन को regex या regexp के रूप में संक्षेपित किया जाता है।

रेग्युलर ऍक्सप्रैशन का प्रयोग कई प्रोग्रामन भाषाओं में करना सम्भव है (जैसे जावास्क्रिप्ट में) इसके प्रयोग से एक ही लाइन में बहुत बड़ी बात कही या लिखी जा सकती है जिससे प्रोग्राम छोटा और सुवाच्य (वाचने में सरल) हो जाता है। जो प्रोग्रामर नहीं हैं उनके लिये यह 'फाइण्ड ऐण्ड रिप्लेस' के रूप में इसका बहुत उपयोग है।

निम्नलिखित उदाहरण कुछ ऐसी विशेषताओं को स्पष्ट करते हैं, जिन्हें रेग्युलर ऍक्सप्रैशन में अभिव्यक्त किया जा सके:

  • "car" वर्णक्रम किसी भी सन्दर्भ में, जैसे कि, "car", "cartoon", अथवा "bicarbonate"
  • "car" शब्द जब पृथक प्रकट होता है
  • "car" शब्द जब "blue" या "red" से पहले आता है
  • जब डॉलर चिह्न के बाद एक या अधिक संख्याएं आती हैं और तब जब एक वैकल्पिक अवधि एवं दो अधिक संख्याओं के बाद आती है

रेग्युलर ऍक्सप्रैशन इन उदाहरणों से भी अधिक जटिल हो सकते हैं: रेग्युलर ऍक्सप्रैशन के प्रयोग कई पाठ संपादकों द्वारा उपयोगिता एवं भाषाओँ की प्रोग्रामिंग में पैटर्न पर आधारित मूल पाठ की खोज और उसमें मनचाहे बदलाव के लिए किया गए हैं। उदाहरण के लिए, Perl, Ruby और Tcl सशक्त रेग्युलर ऍक्सप्रैशन इंजिन उनके वाक्य विन्यास में बना हुआ है। Unix वितरणों के द्वारा प्रदत्त अनेक उपयोगिताएं -- संपादक ed एवं फिल्टर grep—रेग्युलर ऍक्सप्रैशन की अवधारणा को लोकप्रिय बनाने में सर्वप्रथम थे।

वाक्य रचना के एक उदाहरण के रूप में, रेग्युलर ऍक्सप्रैशन \bex का प्रयोग "शब्द सीमाओं" (\b द्वारा संकेतित) के बाद आने वाले "ex " स्ट्रिंग के सभी उदाहरणों की खोज के लिए हो सकता है। अल्पज्ञों की शब्दावली में, \bex अपने से मिलता जुलता स्ट्रिंग "ex" को दो संभावित क्षेत्रों में खोज लेगा, शब्दों के आरंभ में और एक स्ट्रिंग में दो वर्णों के बीच में, जिसमें से एक तो शब्द वर्ण है और दूसरा शब्द वर्ण नहीं है। इस प्रकार, स्ट्रिंग में "Texts for experts", \bex "एक्सपर्ट्स" में तो "ex " के साथ मेल खाता है, लेकिन "Texts" में मेल नहीं खाता (क्योंकि "ex " एक शब्द की सीमा में आ जाता है न कि शब्द सीमा के तुंरत बाद).

कई आधुनिक कम्प्यूटिंग प्रणालियां एक फाइल सिस्टम से फाइलनेम्स के साथ मेल खिलाने के लिए वाइल्डकार्ड वर्ण उपलब्ध कराती हैं। यह कई कमांड-लाइन शेल्स की आभ्यंतर क्षमता है, जिसे ग्लोबिंग के रूप में भी जाना जाता है। वाइल्डकार्ड आमतौर पर रेग्युलर ऍक्सप्रैशन से केवल विकल्पों को सीमित रूप में सूचित करने के मामले में भिन्न है।

रेग्युलर ऍक्सप्रैशन के उपयोग[संपादित करें]

  • वेब-खोज में
  • शब्द-संसाधन (Word processing) - खोजने (find) और बदलने (Replace) के लिये
  • किसी डेटाबेस में क्षेत्रों की वैधता की जाँच के लिये (Validate fields in a database ; dates, email addr, URLs)
  • किसी कॉर्पस (corpus) में किसी भाषायी पैटर्न (linguistic patterns) की खोज करना
  • वर्ग पहेली के निर्माण एवं उसके हल में रेगुलर एक्सप्रेशन का उपयोग किया जा सकता है।
  • तुकान्त शब्द खोजने में - जैसे किसी कवि को पाँच वर्ण वाला कोई शब्द चाहिये जिसके अन्त में 'सी' हो, तो इसके लिये वह रेगुलर एक्सप्रेशन की सहायता ले सकता है।

रेग्युलर ऍक्सप्रैशन वाक्य विन्यास की उत्पत्ति में उपयोगी हैं जो प्रणालियों को उजागर करते हैं, जैसे कि डेटा सत्यापन और कई अन्य कार्यों के निष्पादन में.

रेग्युलर ऍक्सप्रैशन खोज इंजन के लिए उपयोगी होगा जैसे Google, Bing या Yahoo! Search में तो संपूर्ण डेटाबेस से होकर गुजरते हुए प्रोसेसिंग करना जटिलता और रिजेक्स की डिजाइन को देखते हुए अधिक कम्प्यूटर संसाधन खर्च करना होगा। हालांकि कई स्थितियों में सिस्टम प्रशासक रिजेक्स आधारित आंतरिक प्रश्नों को चला सकता है, अधिकतर सर्च इंजन लोगों को रिजेक्स की सहायता उपलब्ध नहीं कराते. एक उल्लेखनीय अपवाद गूगल कोड सर्च है।

आधारभूत अवधारणाएं[संपादित करें]

रेग्युलर ऍक्सप्रैशन, जिसे प्रायः पैटर्न भी कहा जाता है, एक ऐसा सूचक है जो स्ट्रिंग्स के एक सेट के बारे में विस्तार से बतलाता है। उनका उपयोग आमतौर पर तत्वों की सूची बनाए बिना सेट के बारे में संक्षेप में बताने के लिए होता है। उदाहरण के लिए, 'सेट' जिसमें तीन स्ट्रिंग्स होते हैं "Handel ", "Händel " और "Haendel " को H(ä|ae?) ndel के पैटर्न के रूप में वर्णित किया जा सकता है (या वैकल्पिक रूप से, ऐसा कहा जाता है कि पैटर्न तीन में से प्रत्येक स्ट्रिंग के साथ मेल खाते हैं). अधिकतर आकारवादों (श्रृंखलाओं) में अगर कोई रिजेक्स किसी खास सेट के साथ मेल खाता है तो यह जान लेना चाहिए कि ऐसे सूचकों की अनंत संख्या है। अधिकांश आकारवाद निम्नलिखित क्रियाओं के लिए रेग्युलर ऍक्सप्रैशन बनाती हैं।

बूलियन "or"
एक लम्बवत् बार विकल्पों को विभाजित करता है। उदाहरण के लिए, gray

|grey के साथ "gray " या "grey " मेल खाता है।

समूहीकरण
कोष्ठकों का प्रयोग प्रचालकों (जो दूसरे प्रकार से व्यवहार में हैं) उनके उद्देश्य और वरीयता को परिभाषित करने के लिए किया जाता है। उदाहरण के लिए, gray

|grey और gr(a|e)y समरूप पैटर्न्स हैं, जो "gray " और "grey " दोनों ही सेट को वर्णित करते हैं।

परिमाणन
टोकन के बाद एक परिमाणन (जैसी कि एक वर्ण) अथवा ग्रुप यह निर्दिष्ट करता है कि पिछले तत्वों को कितनी बार उसमें आने की अनुमति दी गई है। सबसे आम परिमाणक हैं: प्रश्नवाचक चिह्न ?, तारक चिह्न * (क्लीन तारे से व्युत्पन्न) और जोड़ का चिह्न +.
? प्रश्नवाचक चिह्न पूर्ववर्ती तत्व के शून्य या एक को सूचित करता है। उदाहरण के लिए, colou?r "color " और "colour " दोनों से ही मेल खाता है।
* तारक चिह्न पूर्ववर्ती तत्वों के शून्य या अधिक को सूचित करता है।

उदाहरण के लिए, ab*c "ac ", "abc ", "abbc ", "abbbc " और इसी प्रकार से मेल खाता है।

+ जोड़ का चिह्न सूचित करता है कि एक अथवा एक से अधिक पिछले तत्व हैं। उदाहरण के लिए, ab+c "abc ", "abbc ", "abbbc " और इसी प्रकार से मेल खाता है, लेकिन "ac " से नहीं.

इन बनावटों को मनमाने ढंग से जटिल सूचकों के गठन के लिए एक साथ जोड़ दिया जा सकता है, ठीक उसी तरह जिस तरह कोई अंकगणितीय सूचकों का गठन संख्याओं एवं संक्रियाओं +, , × और ÷ से कर सकता है। उदाहरण के लिए, H(ae?|ä)ndel एवं H(a|ae|ä)ndel दोनों ही प्रामाणिक पैटर्न हैं, जो पिछले उदाहरण की ही तह समान स्ट्रिंग्स के साथ मेल खाता है, वह पिछला उदाहरण है H(ä|ae?)ndel.

रेग्युलर ऍक्सप्रैशन के लिए सटीक वाक्य-विन्यास उपकरणों और संदर्भ के साथ बदलते रहते हैं; अधिक विवरण "वाक्य-विन्यास" खंड में दिया गया है।

इतिहास[संपादित करें]

रेग्युलर ऍक्सप्रैशन की जड़ें ऑटोमेटा सिद्धांत एवं औपचारिक भाषा सिद्धांत में निहित हैं, दोनों ही सैद्धांतिक कंप्यूटर विज्ञान के अंग हैं। ये क्षेत्र प्रशिक्षण कंप्यूटेशन (ऑटोमेटा) एवं औपचारिक भाषाओं के वर्णन एवं वर्गीकरण की पद्धतियों के मॉडल हैं। 1950 के दशक में, गणितज्ञ स्टीफेन कोल क्लीन ने अपने गणितीय संकेतन का प्रयोग करते हुए इन मॉडलों का सविस्तार वर्णन किया, जिसे रेगुलर सेट्स[1] कहते हैं। SNOBOL की भाषा पैटर्न मिलान कराने का आरंभिक उपकरण था, लेकिन रेग्युलर ऍक्सप्रैशन के सदृश नहीं. केन थॉम्पसन ने टेक्स्ट फाइल्स में पैटर्न्स के मिलान कराने के माध्यम के रूप में क्लीन के संकेतन का उपयोग संपादक QED के गठन में किया। बाद में उन्होंने Unix संपादक ed में इस क्षमता को जोड़ा, जिसने अंततः रेग्युलर ऍक्सप्रैशन के उपयोग के लिए लोकप्रिय खोजी उपकरण ग्रेप का पता लगाया ("grep" शब्द रेग्युलर ऍक्सप्रैशन ed संपादक की खोज के कमांड से लिया गया है g/re/p जिसमें re रेग्युलर ऍक्सप्रैशन का द्योतक है[2]). समयांतराल से, रेग्युलर ऍक्सप्रैशन के थॉम्पसन के मौलिक रूपांतर में कई बदलाव आए हैं, जिनका व्यापक प्रयोग Unix और Unix जैसी ही प्रयोज्यता, expr, AWK, Emacs, vi और lex सहित हुआ है।

Perl और Tcl रेग्युलर ऍक्सप्रैशन हेनरी स्पेंसर लिखित रिजेक्स लाइब्रेरी से ली गई थीं, हालांकि Perl को स्पेंसर की लाइब्रेरी में अनेक नई विशेषताएं जोड़ने के लिए प्रसारित किया गया।[3]फिलिप हेज़ेल ने PCRE (पर्ल कम्पैटिबल रेग्युलर ऍक्सप्रैशन) को विकसित किया, जो पर्ल की रेग्युलर ऍक्सप्रैशन की कार्यशीलता की लगभग नकल करने की कोशिश करता है, एवं अनेक आधुनिक उपकरणों PHP और Apache HTTP Server के द्वारा प्रयोग में लाया जाता है। Perl 6 की डिज़ाइन की प्रचेष्टा का एक हिस्सा पर्ल के रेग्युलर ऍक्सप्रैशन के एकीकरण में सुधार तथा उनके कार्यक्षेत्र एवं क्षमताओं को बढ़ाना ताकि सूचकों की पदव्याख्या के व्याकरण[4] को परिभाषित करने का मौका दिया जा सके. परिणामस्वरूप एक लघु भाषा Perl 6 नियम बनी, जिसका प्रयोग Perl 6 ग्रामर को परिभाषित करने और साथ ही साथ भाषा में प्रोग्रामर्स के लिए उपकरण मुहैया कराने के लिया होता है। ये नियम पर्ल 5.x रेग्युलर ऍक्सप्रैशन की विशेषताओं को कायम रखते हैं, लेकिन उप-नियमों के द्वारा पुनःप्रवाही सुंदर पद व्याख्या की BNF-शैली की परिभाषा को भी अनुमति प्रदान करते हैं।

दस्तावेज़ और डाटाबेस मॉडलिंग के लिए संरचित सूचना मानकों में रेग्युलर ऍक्सप्रैशन का प्रयोग 1960 के दशक में आरंभ हुआ और 1980 के दशक में फैल गया, जब ISO SGML (ANSI "GCA 101-1983" द्वारा पूर्व आरोपित) उद्योग मानक समेकित हुए. भाषा मानकों में संरचना की सुस्पष्टता के केंद्र में रेग्युलर ऍक्सप्रैशन हैं। समूह वाक्य विन्यास में DTD तत्व का सरल उपयोग स्पष्ट है।

पैटर्न मिलान: इतिहास भी देखें

औपचारिक भाषा सिद्धांत[संपादित करें]

परिभाषा[संपादित करें]

रेग्युलर ऍक्सप्रैशन को औपचारिक भाषा सिद्धांत के रूप में परिभाषित किया जा सकता है। रेग्युलर ऍक्सप्रैशन में स्थिरांक और ऑपरेटर्स होते हैं, जो स्ट्रिंग्स के सेट्स इन सेटों पर क्रियाशीलताओं को क्रमशः सूचित करते हैं। निम्नलिखित परिभाषा मानक है और औपचारिक भाषा सिद्धांत की अधिकांश पाठ्य पुस्तकों में पायी जाती है[5][6]. एक सीमाबद्ध वर्णमाला Σしぐま को देखते हुए निम्नलिखित स्थिरांकों की परिभाषा दी गई है:

  • सेट को संकेतित करते हुए (empty set)
  • εいぷしろん "empty" स्ट्रिंग को संकेतित करते हुए (empty string), बिलकुल बिना वर्ण के.
  • भाषा में वर्ण को संकेतित करते हुए Σしぐま (literal character) में a .

निम्नलिखित संक्रियाएं परिभाषित हैं:

  • (संयोजन) RS जो सेट { αあるふぁβべーた

| αあるふぁ in R and βべーた in S } को संकेतित करता है। उदाहरण के लिए {"ab", "c"}{"d", "ef"} = {"abd", "abef", "cd", "cef"}.

  • (प्रत्यावर्तन) R

| S जो R और S के गठबंधन को संकेतित करता है। उदाहरण के लिए {"ab", "c"}|{"ab", "d", "ef"} = {"ab", "c", "d", "ef"}.

  • (क्लीन तारा) R * R के सबसे छोटे अतिरिक्त सेट जिसमें εいぷしろん है और जो स्ट्रिंग के अदंर बंद है, उसे संकेतित करता हुआ। यह सभी स्ट्रिंग्स का सेट है, जिसे जीरो अथवा R में अधिक स्ट्रिंग्स के संयोजन से बनाया जा सकता है। उदाहरण के लिए, {"ab", "c"}* = {εいぷしろん, "ab", "c", "abab", "abc", "cab", "cc", "ababab", "abcab", ... }.

कोष्ठकों से बचने के लिए यह मान लिया गया है कि क्लीन तारा को ही सर्वोच्च प्राथमिकता प्राप्त है और इसके बाद संयोजन और तब जाकर सेट गठबंधन को. अगर कोई संशय नहीं है तो कोष्ठकों का लोप हो सकता है। उदाहरण के लिए, (ab)c को abc और a|(b(c*)) को a|bc* जैसा भी लिखा जा सकता है। कई पाठ्य पुस्तकों में लंबरूप बार के बदले संयोजन के लिए , +, या चिह्नों का प्रयोग मिलता है।

उदाहरण:

  • a

|b* {εいぷしろん, {0}a, b, bb, bbb, ...} को संकेतित करता है।

  • (a

|b)* खाली स्ट्रिंग: {εいぷしろん, {0}a, b, aa, ab, ba, bb, aaa, ...} समेत a और b के अलावा बिना प्रतीक चिह्नों के सभी स्ट्रिंग के सेट को संकेतित करता है।

  • ab*(c

|εいぷしろん) a से आरंभ कर स्ट्रिंग्स के सेट को, तब जीरो अथवा अधिक b s और अंत में विकल्प के साथ a c : {{0}a, ac, ab, abc, abb, abbc, ...} को संकेतित करता है।

सूचक शक्ति और सुसंहति[संपादित करें]

रेग्युलर ऍक्सप्रैशन की औपचारिक परिभाषा जानबूझकर किफायती है और अनावश्यक परिमाणक ? से बचने के लिए तथा +, जिसे : a+ = aa* और a?= (a|εいぷしろん) के रूप में व्यक्त किया जा सकता है। कभी-कभी पूरक ऑपरेटर को जोड़ा जाता है; Rc Σしぐま* पर सभी स्ट्रिंग्स के सेट को जो R c में नहीं हैं, संकेतित करते हैं। नियमतः पूरक ऑपरेटर अनावश्यक है, जैसा कि दूसरे ऑपरेटरों का उपयोग कर इसे सीमित किया जा सकता है। हालांकि, ऐसे निरूपण कम्प्यूटिंग प्रक्रिया जटिल है और इसके परिणाम को ऐसे आकार के सूचकों की आवश्यकता पड़ सकती है जो घातांकी रूप से दोगुने बड़े हैं[7][8].

इस अर्थ में रेग्युलर ऍक्सप्रैशन सुव्यवस्थित भाषा को सूचित कर सकते हैं, ठीक-ठीक भाषा की ऐसी श्रेणी जो नियमात्मक परिमित ऑटोमेटा के द्वारा स्वीकृत है। हालांकि फिर भी सुसंहति में एक उल्लेखनीय अंतर है। सुव्यवस्थित भाषाओँ की कुछ श्रेणियों को नियमात्मक परिमित ऑटोमेटा द्वारा वर्णित किया जा सकता है, जिसका आकार घातांकी रूप से सबसे छोटे रेग्युलर ऍक्सप्रैशन के समकक्ष बढ़ जाता है। भाषाएं ही यहां मानक उदाहरण हैं। Lk वर्ण {{0}a,b } पर जिसका अंतिम अक्षर k a की बराबरी अपने सभी स्ट्रिंग्स सहित करता है। एक ओर, L 4 को वर्णित करने वाले रेग्युलर ऍक्सप्रैशन दिया हुआ है। इस पैटर्न को Lk में सामान्यीकरण सूचक देता है

दूसरी ओर, यह विदित है कि Lk भाषा को स्वीकार करता हुआ नियातात्मक परिमित ऑटोमेटन के पास कई स्थितियों में कम से कम 2k के होना जरूरी है। भाग्यवश, रेग्युलर ऍक्सप्रैशन से अधिक आम अनियतात्मक परिमित ऑटोमेटा (NFAs) तक सरल मानचित्रण है, जो अचानक इतना बड़ा विस्फोटक आकार ग्रहण नहीं कर लेता; यही कारण है कि NFAs को अक्सर सुव्यवस्थित भाषाओँ के वैकल्पिक निरूपण के रूप में इस्तेमाल किया जाता है। NFAs चोम्स्की अनुक्रम के टाइप-3 ग्रामर्स के सरल परिवर्तन हैं[5].

अंत में, यह ध्यान देने योग्य बात है कि वास्तव जगत में अनेक रेग्युलर ऍक्सप्रैशन इंजिन ऐसी विशेषताओं को लागू करते हैं, जिसे रेग्युलर ऍक्सप्रैशन के द्वारा औपचारिक भाषा सिद्धांत के अर्थ में वर्णित नहीं किया जा सकता; इस विषय पर अधिकाधिक जानकारी के लिए नीचे देखें.

रेग्युलर ऍक्सप्रैशन की निर्णायक तुल्यता[संपादित करें]

जैसा कि उदाहरणों को देखने से पता चलता है, विभिन्न रेग्युलर ऍक्सप्रैशन उसी भाषा को अभिव्यक्त कर सकते हैं: रीतिवाद अनावश्यक है।

कलनविधि में लेखन संभव है जो दिए गए रेग्युलर ऍक्सप्रैशन के मध्य यह निर्णय करने के लिए कि उल्लिखित भाषाएं अनिवार्य रूप से एक समान हैं कि नहीं. यह प्रत्येक अभिव्यक्ति को न्यूनतम नियतात्मक परिमित स्थिति मशीन की हद तक कम कर देता है और निर्धारित करता है कि क्या वे समाकृतिक (एक ही आकार के) समकक्ष हैं या नहीं.

इस अनावश्यकता को किस हद तक निकाल दिया जा सकता है? क्या हम रेग्युलर ऍक्सप्रैशन का एक रोचक सबसेट खोज सकते हैं जो पूरी तरह सूचक हो? क्लीन तारा और सेट का गठबंधन स्पष्टतः आवश्यक है, लेकिन शायद हम उनके प्रयोग पर रोक लगा सकते हैं। यह आश्चर्यजनक रूप से कठिन समस्या में बदल सकता है। रेग्युलर ऍक्सप्रैशन इतने सरल हैं कि उन्हें किसी भी रूप में पुनः सुव्यवस्थित ढंग से लिखने की कोई प्रणाली है ही नहीं. अतीत में स्वतः प्रमाणन के अभाव में स्टार हाइट की समस्या खड़ी हो गई। हाल ही में, डेक्सटर कोज़ेन में रेग्युलर ऍक्सप्रैशन को क्लीन के बीजगणित[9] के साथ स्वतः प्रमाणित कर दिया.

वाक्य-विन्यास[संपादित करें]

POSIX[संपादित करें]

POSIX बेसिक रेग्युलर ऍक्सप्रैशन[संपादित करें]

पारंपरिक Unix रेग्युलर ऍक्सप्रैशन वाक्य-विन्यास ने आम परिपाटी का अनुसरण नहीं किया, लेकिन एक उपकरण से दूसरे उपकरण में अक्सर अंतर रहता था। IEEE POSIX बेसिक रेग्युलर ऍक्सप्रैशन (BRE) मानक (इसके साथ ही साथ एक वैकल्पिक मजेदार वैशिष्ट्य रिलीज़ किया, जिसे विस्तारित रेग्युलर ऍक्सप्रैशन या ERE कहा गया) खासकर उल्टी (पीछे की ओर जाने वाली) अनुकूलता के लिए परंपरागत (सरल रेग्युलर ऍक्सप्रैशन) वाक्य-विन्यास के साथ इसे डिज़ाइन किया गया, किंतु इसने एक सामान्य मानक उपलब्ध कराया जिसे कई Unix रेग्युलर ऍक्सप्रैशन उपकरणों के व्यतिक्रम वाले वाक्य-विन्यास के रूप में अपना लिया गया है, हालांकि इसमें अब भी अक्सर कुछ विविधताएं अथवा अतिरिक्त विशेषताएं दिखाई देती हैं। ऐसे अनेक उपकरण हैं जो कमांड लाइन विषयों के साथ ERE वाक्य-विन्यास को सहारा देते हैं।

BRE वाक्य-विन्यास में, अधिकांश अक्षरों को शाब्दिक अर्थ में लिया जाता है -- वे आपस में एक दूसरे से मेल खाते हैं (जैसे कि, a "a " के साथ मैच करता है). नीचे सूचीबद्ध अपवादों को अक्षरों से परे या अनुक्रमों से अलग कहा जाता है।

अक्षरों से परे विवरण
. किसी एक अक्षर से मेल खाता है (कई कंप्यूटर प्रोग्राम न्यू लाइंस को बाहर छोड़ देते हैं और ठीक-ठीक जिन अक्षरों को न्यूलाइन माना जाता हैं वही अक्षरों का संकेतीकरण (कूटलेखन) और विशिष्ट उन्नत स्थान है, लेकिन ऐसा मानना सुरक्षित है कि लाइन फीड अक्षर शामिल है).POSIX के अंतर्गत कोष्ठक सूचक, बिंदु वाले अक्षर शाब्दिक बिंदु से मेल खाते हैं। उदाहरण के लिए, a.c "abc ", इत्यादि से मेल खाता है लेकिन [a.c] केवल "a ", ". ", या "c " से मेल खाते हैं।
[ ] एक कोष्ठक सूचक केवल एक अक्षर से मेल खाता है जो कोष्ठक के अदंर अवस्थित है। उदाहरण के लिए [abc] "a ", "b ", या "c " से मेल खाता है। [a-z] एक सीमा को निर्दिष्ट करते हैं जो निम्न क्रम में "a " से "z " तक किसी भी अक्षर से मेल खाता है। इन आकारों को मिलाया जा सकता है: [abcx-z] "a ", "b ", "c ", "x ", "y ", या "z " के साथ मेल खाता है जैसा कि [a-cx-z] के साथ होता है। - अक्षर को एक शाब्दिक अक्षर के रूप में व्यवहार किया जाता है, अगर कोष्ठक के भीतर का यह अंतिम अथवा प्रथम अक्षर हो तो, या बैकस्लैश के साथ भाग गया हो: [abc-], [-abc], या [a\-bc].
[^ ] कोष्ठकों के भीतर अवस्थित नहीं है, ऐसा कोई अकेला अक्षर मेल खाता है। उदाहरण के लिए, [^abc] "a ", "b ", या "c " के अलावा किसी भी अक्षर से मेल खाता है। [^a-z] ऐसे किसी अकेले अक्षर से मेल खाता है जो "a " से "z " तक निम्न क्रम का वर्ण नहीं है। ऊपर की ही तरह शाब्दिक अक्षरों एवं अनुक्रमों को मिलाया जा सकता है।
^ स्ट्रिंग के भीतर ही आरंभिक अवस्थिति से मेल खाता है। लाइन पर आधारित उपकरणों में यह किसी भी पंक्ति की आरंभिक अवस्थिति से मेल खाता है।
$ स्ट्रिंग की अंतिम स्थिति के साथ अथवा स्ट्रिंग के समाप्त होने की न्यू लाइन से पहले की स्थिति के साथ मेल खाता है। लाइन पर आधारित उपकरणों में किसी लाइन की अंतिम स्थिति के साथ मेल खाता है।
BRE: \( \)
ERE: ( )
चिह्नित उपसूचक को परिभाषित करता है। स्ट्रिंग उपवाक्यों के अंतर्गत मेल खाता है जिसे बाद में प्रत्याहार किया जा सकता है (अगली प्रविष्टि \n देखें). एक चिह्नित उपसूचक को ब्लॉक अथवा कैपचरिंग ग्रुप भी कहा जाता है।
\n n th चिह्नित उपसूचक के साथ मेल खाता है, जहां n 1 से 9 के बीच की एक संख्या है। यह बनावट सैद्धांतिक रूप से अव्यवस्थित हैं एवं इसे POSIX ERE वाक्य-विन्यास में नहीं अपनाया गया था। कुछ उपकरण नौ से अधिक अधिकार-वर्गों के संकेत की अनुमति देते हैं।
* पूर्ववर्ती तत्व शून्य या अधिक बार मेल खाता है। उदाहरण के लिए, ab*c "ac ", "abc ", "abbbc ", इत्यादि से मेल खाता है। [xyz]* "", "x ", "y ", "z ", "zx ", "zyx ", "xyzzy " और इसी प्रकार से मेल खाता है। \(ab\)* "", "ab ", "abab ", "ababab " और इसी प्रकार से मेल खाता है।
BRE: \{m,n\}
ERE: {m,n}
पिछले तत्व कम से कम m से और n टाइम्स से अधिक बार नहीं मेल खाता है। उदाहरण के लिए, a\{3,5\} केवल "aaa ", "aaaa " और "aaaaa " से मेल खाता है। यह रेग्युलर ऍक्सप्रैशन के कुछ पुराने उदाहरणों में नहीं पाया जाता है।

उदाहरण:

  • .at किसी भी तीन अक्षर के स्ट्रिंग में जिसके अंत में "at" हो "hat ", "cat " और "bat " सहित मेल खाता है।
  • [hc]at "hat " और "cat " से मेल खाता है।
  • [^b]at सभी स्ट्रिंग्स के साथ .at द्वारा मेल खाता है, "bat " को छोड़कर.
  • ^[hc]at "hat " और "cat " के साथ मेल खाता है, किंतु केवल स्ट्रिंग अथवा लाइन के आरंभ में.
  • [hc]at$ "hat " और "cat " के साथ मेल खाता है, किंतु केवल स्ट्रिंग या लाइन के अंत में.

POSIX विस्तारित रेग्युलर ऍक्सप्रैशन[संपादित करें]

अक्षरों से परे का अर्थ बैकस्लैश से बचकर कुछ अक्षरों के लिए POSIX विस्तृत रेग्युलर ऍक्सप्रैशन (ERE) के वाक्य-विन्यास में विपरीत है। इस वाक्य-विन्यास में ही, एक बैकस्लैश के कारण मेटा कैरेक्टर को शाब्दिक अक्षरों के रूप में माना जाता है। अतः उदाहरण के लिए, \(\) अब () है और \{ \} अब { }. साथ ही साथ, पिछले संदर्भों के लिए \n को हटा लिया गया है और निम्नलिखित अक्षरों से परे को शामिल किया गया हैं:

मेटा कैरेक्टर विवरण
? पूर्ववर्ती तत्व शून्य या एक बार मेल खाता है। उदाहरण के लिए, ba?"b " या "ba " के साथ मेल खाता है।
+ पिछले तत्व से एक या एक से अधिक बार मेल खाता है। उदाहरण के लिए, ba+ "ba ", "baa ", "baaa " और इसी प्रकार आगे भी मेल खाता है।
* पिछले तत्व से शून्य अथवा अधिक बार मेल खाता है। उदाहरण के लिए, ba* "b ", "ba ", "baa ", "baaa " और इसी प्रकार आगे भी मेल खाता है।
| पसंद (उर्फ प्रत्यावर्तन अथवा सेट गठबंधन) ऑपरेटर सूचक से पहले अथवा सूचक के बाद के ऑपरेटर के साथ मेल खाता है। उदाहरण के लिए, abc|def "abc " या "def " के साथ मेल खाता है।

उदाहरण:

  • [hc]+at matches "hat ", "cat ", "hhat ", "chat ", "hcat ", "ccchat ", and so on, but not "at ".
  • [hc]?at "hat ", "cat " और "at " के साथ मेल खाता है।
  • [hc]*at matches "hat ", "cat ", "hhat ", "chat ", "hcat ", "ccchat ", "at ", and so on.
  • cat

|dog "cat " या "dog " के साथ मेल खाता है।

POSIX विस्तारित रेग्युलर ऍक्सप्रैशन का प्रयोग अक्सर आधुनिक Unix प्रयोज्यता के साथ कमांड लाइन फ्लैग -E को शामिल कर किया जा सकता है।

POSIX अक्षरों की श्रेणियां[संपादित करें]

चूंकि अक्षरों की अनेक वर्गीकृत श्रेणियां चुने हुए स्थानीय सेटिंग (जैसे कि कुछ सेटिंग्स में अक्षरों को abc...zABC... Z के रूप में व्यवस्थित किया गया है, जबकि कुछ दूसरों को aAbBcC...zZ), POSIX मानक अक्षरों की कुछ श्रेणियों अथवा वर्गों को निम्न तालिका में दिखाया गया है:

POSIX Perl ASCII विवरण
[:alnum:] [A-Za-z0-9] अक्षरांकीय वर्ण
[:word:] \w [A-Za-z0-9_] अक्षरांकीय वर्ण जोड़ का चिह्न "_"
\W [^\w] गैर-शब्द चरित्र
[:alpha:] [A-Za-z] वर्णात्मक अक्षर
[:blank:] [ \t] स्पेस और टैब
[:cntrl:] [\x00-\x1F\x7F] नियंत्रण अक्षर
[:digit:] \d [0-9] अंक
\D [^\d] गैर-अंक
[:graph:] [\x21-\x7E] प्रकट अक्षर
[:lower:] [a-z] छोटे अक्षर
[:print:] [\x20-\x7E] प्रकट अक्षर और स्पेसेज़
[:punct:] [-!"#$%&'()*+,./:; विराम चिह्न वाले अक्षर
[:space:] \s [ \t\r\n\v\f] व्हाइटस्पेस अक्षर
\S [^\s] नॉन-व्हाइटस्पेस अक्षर
[:upper:] [A-Z] उच्चवर्ग के बड़े अक्षर
[:xdigit:] [A-Fa-f0-9] षड्दशमिक अंक

POSIX अक्षरों की श्रेणियों का प्रयोग केवल कोष्ठक सूचकों के अंदर ही हो सकता है। उदाहरण के लिए, [[:upper:]ab] उच्चवर्ग के बड़े अक्षरों एवं छोटे अक्षरों "a " और "b " के साथ ही मेल खाता है।

Perl के रेग्युलर ऍक्सप्रैशन में, [:print:] के साथ [:graph:] मेल खाता है और [:space:] के साथ गठबंधन करता है। एक अतिरिक्त गैर-POSIX श्रेणी को कुछ उपकरणों के द्वारा समझा गया है वह है [:word:], जिसे आमतौर पर [:alnum:] प्लस रेखांकन underscore के द्वारा परिभाषित किया गया है। यह इस तथ्य को उद्भासित करता है कि कई प्रोग्रामिंग भाषाओँ में ये ही वे अक्षर हैं जिनका प्रयोग पहचान चिह्न के रूप में किया जा सकता है। संपादक Vim आगे वर्ड और वर्ड-हेड श्रेणी के बीच अंतर स्पष्ट करते हुए पहचान बताते हैं (संकेतन \w और \h का प्रयोग करते हुए). चूंकि कई प्रोग्रामिंग भाषाओँ में जो अक्षर पहचान चिह्न के रूप में आरंभ कर सकते हैं वे उनके समान नहीं हैं, जो अन्य स्थिति में उपस्थित हो सकते हैं।

यह द्रष्टव्य है कि POSIX रेग्युलर ऍक्सप्रैशन मानकों कॉल कैरेक्टर क्लासेस दूसरे रेग्युलर ऍक्सप्रैशन के रंग में, जो उन्हें सहयोग प्रदान करते हुए उन्हें साधारणतया POSIX कैरेक्टर क्लासेस के रूप में संदर्भित किया जाता है। अधिकांश अन्य रेग्युलर ऍक्सप्रैशन फ्लेवर्स के साथ कैरेक्टर क्लासेस पद-बंध का प्रयोग POSIX निर्धारित कोष्ठक सूचकों का वर्णन करने के लिए किया जाता है।

Perl-व्युत्पन्न रेग्युलर ऍक्सप्रैशन[संपादित करें]

POSIX बेसिक (BRE) और विस्तारित रेग्युलर ऍक्सप्रैशन मानकों (ERE) की तुलना में Perl के पास अधिक सुसंगत और समृद्ध वाक्य-विन्यास है। इसकी निरंतरता का एक उदाहरण है कि \ हमेशा गैर-वर्णान्कित अक्षरों से अलग भागता है। क्रियाशीलता का अन्य उदाहरण Perl के साथ तो संभव है, पर POSIX के साथ नहीं - अनुवर्ती रेग्युलर ऍक्सप्रैशन सुस्त परिमाणन की अवधारणा है (अगले अनुभाग में देखें).

व्यापक रूप से अपनी सूचक क्षमता के कारण कई अन्य प्रयोज्यता और प्रोग्रामिंग की भाषाओँ ने वाक्य-विन्यास को Perl की ही तरह अपना लिया है -- उदाहरण के लिए, Java, JavaScript, PCRE, Python, Ruby, Microsoft's .NET Framework और W3C's XML Schema सभी रेग्युलर ऍक्सप्रैशन वाक्य-विन्यास का प्रयोग Perl की ही तरह करते हैं। कुछ भाषाएं एवं उपकरण जैसे कि Boost और PHP बहु रेग्युलर ऍक्सप्रैशन फ्लेवर को सहयोग प्रदान करते हैं। Perl व्युत्पन्न रेग्युलर ऍक्सप्रैशन के कार्यान्वयन में एकरूपता नहीं है और कुछ केवल Perl की विशेषताओं के सबसेट को ही कार्यान्वित करते हैं। Perl 5.10 की प्रक्रिया अपनी पूर्णता और विस्तार के साथ Perl निगमित वाक्य-विन्यास के विस्तार तक पहुंच गई है - मूलतः Python, PCRE, .NET Framework और Java से.

सरल रेग्युलर ऍक्सप्रैशन[संपादित करें]

सरल रेग्युलर ऍक्सप्रैशन ऐसा वाक्य-विन्यास है, जिनका प्रयोग कंप्यूटर ऍप्लिकेशन प्रोग्राम के ऐतिहासिक संस्करणों में किया जा सकता है एवं अपने अंतर्गत कुछ अनुप्रयोगों के द्वारा सहयोग भी पा सकता है। पिछली अनुरूपता प्रदान करने के उद्देश्य से इसे अनुचित[10] समझा गया है।

सुस्त परिमाणन[संपादित करें]

रेग्युलर ऍक्सप्रैशन में मानक परिमापक लालची हैं अर्थात् वे जितना मेल खा सकते हैं अधिक से अधिक उतनी बार मेल खाते हैं, बाकी को रिजेक्स के साथ कोई नया मेल खाने के लिए छोड़ देते हैं। उदाहरण के लिए,regexes के लिए कोई नया जो किसी एक आइटम के बीच प्रथम दृष्टान्त खोजना चाहता है, इस उदाहरण में < and > प्रतीक चिह्नों के बीच पा सकता है।

एक और व्हेल एक्स्प्लोज़न <January 26>, को घटित हुआ।

... जो <.*>, पैटर्न के साथ अथवा इसी के समान आना चाहेगा. हालांकि यह पैटर्न वास्तव में "<January 26>, " के बदले "<January 26 >" में वापस जाना चाहेगा, जो अपेक्षित था, क्योंकि * परिमाणन जो लालची है -- अतः यह यथासंभव अधिक से अधिक अक्षरों का उपभोग इनपुट से कर लेना चाहेगा, एवं "January 26>, " के पास "January 26" की तुलना में अधिक अक्षर होंगे.

हालांकि इस समस्या को कई तरीकों से टाला जा सकता है (जैसे कि विषय वस्तु को निर्दिष्ट कर जो मेल खाने योग्य नहीं है: <[^>]*>), आधुनिक रेग्युलर ऍक्सप्रैशन उपकरण एक परिमाणक को सुस्त के रूप में वैशिष्ट्य पाने की अनुमति देते हैं (जिन्हें गैर-लालची, अनिच्छुक, न्यूनतम अथवा अलालची) परिमाणक के बाद एक प्रश्नचिह्न लगाकर किया जाता है (जैसे कि <.*?>), अथवा संशोधक का प्रयोग कर जो परिमाणक के लालच को उलट देता है (यद्यपि मानक परिमाणक के अर्थ में परिवर्तन दुविधा पैदा कर सकता है). सुस्त परिमाणक का प्रयोग कर सूचक सबसे पहले कम से कम मेल खाने की कोशिश करते हैं। हालांकि पूर्ववर्ती उदाहरण में सुस्त मेल का प्रयोग कई मेलों के परिणामों में से किसी एक का चुनाव करने के लिए किया जाता है, कुछ मामलों में इसका प्रयोग बेहतर निष्पादन के लिए भी किया जा सकता है, जब लालची मिलान को अधिक पीछे हटने की जरूरत पड़ेगी.

अव्यवस्थित भाषाओँ के लिए पैटर्न[संपादित करें]

अव्यवस्थित भाषाओं के लिए पैटर्न आधुनिक रेग्युलर ऍक्सप्रैशन संग्रहों से प्राप्त कई विशेषताएं सूचक क्षमता प्रदान करती है जो सुव्यवस्थित भाषाओं से भी अधिक हो जाती है। उदाहरण के लिए, कई कार्यान्वयन उप सूचकों के समूहीकरण की अनुमति प्रदान करते हैं और उसी सूचक में मेल कराने की कीमत (पिछले सन्दर्भ के साथ) याद दिलाते हैं। इसका अर्थ यह है कि एक पैटर्न दुहराए गए शब्दों की लड़ियों (strings) से मेल खा सकता है, जैसे कि "पापा " अथवा "WikiWiki ", जिसे औपचारिक भाषा सिद्धांत में squares कहते हैं। इन लड़ियों (strings) के लिए पैटर्न है (.*)\1.

हालांकि, squares की भाषा सुव्यवस्थित नहीं है। न ही यह विषय से मुक्त है। बैक रेफरेन्सेस की असीमित संख्याओं पैटर्न के साथ मेल खाता, जैसे कि असीमित संख्या में आधुनिक उपकरण द्वारा समर्थित, एन पी-सम्पूर्ण है (प्रेमय 6.2 देखें[11]).

हालांकि, कई उपकरण, लाइब्रेरीज़ और इंजन जो ऐसी संरचनाएं उपलब्ध कराते हैं, अब भी रेग्युलर ऍक्सप्रैशन शब्दावली का प्रयोग अपने पैटर्नस के लिए करते हैं। इसने रेग्युलर ऍक्सप्रैशन शब्दावली का नामकरण किया है, जिसके औपचारिक भाषा सिद्धांत तथा पैटर्न के कई भिन्न अर्थ हैं। इस कारण, कुछ लोग regex या केवल पैटर्न शब्दावली का प्रयोग परवर्ती की व्याख्या में करते हैं। पर्ल प्रोग्रामिंग भाषा के लेखक, लैरी वॉल एक निबंध में पर्ल 6 के डिजाइन के बारे में लिखते हैं:

'Regular expressions' [...] are only marginally related to real regular expressions. Nevertheless, the term has grown with the capabilities of our pattern matching engines, so I'm not going to try to fight linguistic necessity here. I will, however, generally call them "regexes" (or "regexen", when I'm in an Anglo-Saxon mood).[4]

कार्यान्वयन और चलन समय[संपादित करें]

कम से कम तीन अलग-अलग कलां विधियां कलनविधि हैं, जो निर्धारित करती हैं कि एक दिया गया रेग्युलर ऍक्सप्रैशन किस प्रकार एक स्ट्रिंग के साथ मेल खता है।

सबसे पुराने और सबसे तेज परिणाम पर निर्भर दो औपचारिक भाषा सिद्धांत जो प्रत्येक गैरनियतात्मक परिमित स्थिति यंत्र (NFA) को नियतात्मक परिमित स्थिति मशीन (DFA) में रूपांतरित करना स्वीकार करता है। DFA का स्पष्ट रूप से निर्माण किया जा सकता है और तब इसके परिणामस्वरूप इनपुट पर एक बार में एक प्रतीक चिन्ह पर परिचालित होता है। एक रेग्युलर ऍक्सप्रैशन के आकार के लिए DFA का निर्माण "O"(2m) की कीमत पर करने पर समय और स्मृति आ जाती है, लेकिन यह n आकार के string पर ही O (n) समय में चल सकता है। एक वैकल्पिक प्रयास NFA को सीधे अनुकरण करना है, मांग करने पर अनिवार्य रूप से प्रत्येक DFA स्थिति का निर्माण और तब अगले कदम पर संभवतः caching के साथ इसे बाहर निकाल देना. यह DFA को अंतर्निहित रखता है और निर्माण की घातांक लागत से बचा जा सकता है, लेकिन चलन लागत (running cost) O (nm) तक बढ़ जाती है। इस स्पष्ट पदक्षेप को DFA कलनविधि कहते हैं और अंतर्निहित पदक्षेप को NFA कलनविधि. जैसे कि एक समान DFA को क्रियान्वित करने में दोनों को भिन्न तरीकों से देखा जा सकता है, उन्हें भी बिना भेद-भाव के अक्सर कलनविधि कहते हैं। ये कलन विधियां तेज़ हैं लेकिन समूहीकृत उपसूचकों को लौटाने के लिए उनका प्रयोग सुस्त परिमाणन एवं इसी प्रकार की विशेषताएं पेचीदा हैं।[12][13]

तीसरी कलनविधि बैक ट्रैक के द्वारा पैटर्न के साथ इनपुट स्ट्रिंग के मिलान के लिए है। इस कलनविधि को आमतौर पर NFA कहा जाता है, लेकिन यह शब्दावली अस्पष्ट है। इसका चलन समय घातांकी हो सकता है, जिसका सरल कार्यान्वयन यह उजागर करता है कि जब सूचकों के खिलाफ मिलान जैसे कि (a|aa)*b जिसमे प्रत्यावर्तन और असीमित परिमाणन दोनों ही हैं। कलनविधि पर ज़ोर डालते हैं कि स्थानापन्न मामलों की बढती हुई घातांकी संख्या पर विचार करें. अधिक जटिल कार्यान्वयन अक्सर चिह्नित और गतिशील करते हैं या साधारण मामलों को रद्द कर देती हैं, जब उनका चलन मंद हो जाता है।

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

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

रेग्युलर ऍक्सप्रैशन और यूनिकोड[संपादित करें]

रेग्युलर ऍक्सप्रैशन का आरंभिक प्रयोग ASCII अक्षरों के साथ हुआ। कई रेग्युलर ऍक्सप्रैशन इंजन अब संपूर्ण यूनिकोड के साथ भी काम कर सकते हैं। अधिकांश मामलों में इसमें कोई अंतर नहीं दिखता कि अक्षरों का सेट क्या है, लेकिन कुछ मामलों में फर्क पड़ता है जब रेग्युलर ऍक्सप्रैशन को यूनिकोड पर कार्य करना पड़ता है।

  • समर्थित कोडिंग - कुछ रेग्युलर ऍक्सप्रैशन की लाइब्रेरियां UTF-8 संकेतन की अपेक्षा रखती हैं जबकि दूसरी UTF-16, या UTF-32 की अपेक्षा कर सकती हैं।
  • समर्थित यूनिकोड रेंज - कई रेग्युलर ऍक्सप्रैशन इंजन केवल आधारभूत बहुभाषी प्लेन की सहायता करते हैं, जिसके अक्षरों को केवल 16 बिट्स के साथ संकेतित किया जा सकता है। वर्तमान में, केवल कुछ ही रेग्युलर एक्सप्रेशन इंजन हैं जो पूरे 21 बिट्स के यूनिकोड रेंज को संभाल सकते हैं।
  • ASCII उन्मुख निर्माण को यूनिकोड तक विस्तारित करना - उदाहरण के लिए, ASCII - आधारित कार्यान्वयन में अक्षर के आकार [x-y] के रेंज वैध हैं, जहां x और y [0x00,0x7F] रेंज में संकेतन बिंदु हैं और संकेतबिंदु (x) ≤ संकेतबिंदु (y). ऐसे अक्षर का स्वाभाविक विस्तार जिसका रेंज यूनिकोड तक जाता है, वह केवल आवश्यकता को बदल देता है, जिसमे अंतिम बिंदु जो [0x00,0x7F] से [0,0x10FFFF] तक है। हालांकि, व्यवहार में अक्सर ऐसी स्थिति नहीं होती है। कुछ कार्यान्वयन, जैसे कि gawk, अक्षरों के रेंज को यूनिकोड ब्लॉक सीमा पार करने की अनुमति नहीं देते हैं। [0x61,0x7F] जैसा रेंज वैध है चूँकि दोनों के ही अंतिम बिंदु मूल लैटिन ब्लॉक के अर्न्तगत आते हैं, जैसे [0x0530,0x0560] चूँकि दोनों के अंतिम बिंदु आर्मेनियन ब्लॉक के अर्न्तगत पड़ते हैं। [0x0061,0x0532] जैसा रेंज अवैध है, क्योंकि इसमें कई यूनिकोड ब्लॉक निहित हैं। अन्य इंजन, जैसे सम्पादक Vim के जो ब्लॉक को सीमा पार करने की अनुमति प्रदान करते हैं, लेकिन एक रेंज में अक्षरों की संख्या 128 तक ही सीमित हो जाती है।
  • असंवेदनशीलता की स्थिति - कुछ असंवेदनशीलता की स्थिति के फ्लैग्स केवल ASCII के अक्षरों को प्रभावित करते हैं। अन्य फ्लैग्स सभी अक्षरों को प्रभावित करते हैं। कुछ इंजन के पास दो अलग फ्लैग्स हैं, एक ASCII के लिए और दूसरा यूनिकोड के लिए. कौन-सा अक्षर ठीक-ठीक POSIX श्रेणियों में पड़ता है, यह बदलता भी है।
  • असंवेदनशीलता की स्थिति से जुड़े मामले- जैसे ASCII की स्थिति में अन्तर है, असंवेदनशील स्थिति विषय वस्तु की खोज में एक तार्किक विशेषता बन जाती है। यूनिकोड ने वर्णमाला लिपियों को देवनागरी के बिना ही लागू किया। इनके लिए संवेदनशीलता लागू नहीं होती है। चीनी जैसी लिपियों के लिए, एक और तार्किक अंतर पारंपरिक और सरलीकृत के बीच दिखाई देता है। अरबी लिपियों में, आरंभिक, औसत दर्जे का, अंतिम और अलग स्थिति के प्रति असंवेदनशीलता वांछित है।
  • सामान्यकरण - यूनिकोड ने अक्षरों के संयोजन को लागू किया। पुराने टाइपराइटरों की तरह, सरल अक्षरों का अनुकरण बिना अन्तराल के स्वराघात के प्रतीकों से किया जा सकता है ताकि एक स्वराघाती वर्ण बन जाए. परिणामस्वरुप, दो भिन्न कूट क्रम समान अक्षर का प्रदर्शन कर सकते हैं।
  • नए नियंत्रण कूट. यूनिकोड के कारण दूसरों के बीच बाइट क्रम चिह्न और विषयवस्तु को दिशा देने वाले चिह्न लागू हुए. इन कूटों के साथ एक विशेष तरीके से निपटा जा सकता था।
  • यूनिकोड ब्लॉक और यूनिकोड सामान्य अक्षर की विशेषताओं के लिए अक्षरों का वर्गीकरण लागू करना। Perl और [[[:साँचा:Javadoc:SE/Home URL]]docs/api/java/util/regex/package-summary.html java.util.regex] लाइब्रेरी में, आकार का वर्गीकरण \p{InX} ब्लॉक X के अक्षरों से मेल खाता है और \P{InX} विपरीत से. इसी तरह, \p{Armenian} अर्मेनियाई ब्लॉक में किसी भी अक्षर से मेल खाता है और \p{X} सामान्य अक्षर X से मेल खाता है। उदाहरण के लिए, \p{Lu} किसी भी ऊपरी स्थिति के अक्षर से मेल खाता है।

विभिन्न औजारों में रेग्युलर ऍक्सप्रैशन का प्रयोग[संपादित करें]

  • पाठ सम्पादन (टैक्स्ट ऍडीटिंग) में रेग्युलर ऍक्सप्रैशन के लिये नोटपैड++ का प्रयोग करें। नोटपैड++ का रेगुलर ऍक्सप्रैशन इंजन यूनिकोड का समर्थन करता है। नोटपैड++ में रेगुलर ऍक्सप्रैशन का सिण्टैक्स इसके विकि पर यहाँ देखें।
  • फायरफॉक्स आदि विभिन्न बेब ब्राउजरों में रेग्युलर ऍक्प्रैशन हेतु फॉक्सरिप्लेस नामक ऍडऑन प्रयोग करें। इसका इंजन यूनिकोड का ठीक से समर्थन नहीं करता।
  • विकिपीडिया के नये टूलबार में Search and Replace बटन है जिसमें रेगुलर ऍक्सप्रैशन का समर्थन है।
  • ओपेनऑफिस में भी रेगुलर एक्सप्रेशन का समर्थन है।
  • जटिल रेग्युलर ऍक्सप्रैशन निर्माण एवं टैस्टिंग के लिये नेट पर कई ऑनलाइन तथा ऑफलाइन औजार मौजूद हैं। उदाहरण: RegExBuddy, The Regulator आदि।

देवनागरी में रेगुलर एक्सप्रेशन के लिये कुछ जुगाड़[संपादित करें]

  • यदि देवनागरी पाठ में कुछ खोजना हो या खोजना-बदलना हो तो 'कोई भी अक्षर' के लिये सामान्यतः प्रयुक्त एक्सप्रेशन ([.]) काम नहीं करता है। इसके स्थान पर ([^A-Za-z]) का प्रयोग करने से काम चल जाता है।
  • 'कोई भी देवनागरी व्यंजन' के लिये ([कखगघङचछजझञटठडड़ढढ़णतथदधनपफबभमयरलळवशषसहक्षज्ञ]) का प्रयोग करें।
  • निम्नलिखित जावास्क्रिप्ट स्टेटमेन्ट को देखें-
modified_substring = modified_substring.replace(/([Á])([्])([कखगघङचछजझञटठडड़ढढ़णतथदधनपफबभमयरलळवशषसहक्षज्ञ])/g, "$2$3$1") ;

यह स्टेटमेन्ट यदि Á के बाद हल् (्) आता है और उसके बाद देवनागरी का कोई ब्यंजन आता है तो उसे बदलकर पहले हल्, फिर देवनागरी व्यंजन और अन्त में Á रख देता है। यहाँ $2$3$1 का यही अर्थ है।

इन्हें भी देखें[संपादित करें]

नोट्स[संपादित करें]

  1. Kleene (1956)
  2. Raymond, Eric S. citing Dennis Ritchie (2003). "Jargon File 4.4.7: grep".
  3. Wall, Larry and the Perl 5 development team (2006). "perlre: Perl regular expressions".
  4. Wall (2002)
  5. Hopcroft, Motwani & Ullman (2000)
  6. Sipser (1998)
  7. Gelade & Neven (2008)
  8. Gruber & Holzer (2008)
  9. Kozen (1991)
  10. द सिंगल यूनिक्स स्पेसिफिकेशन (वर्सन 2)
  11. Aho (1990)
  12. Cox (2007)
  13. Laurikari (2009)

सन्दर्भ[संपादित करें]

बाहरी कड़ियाँ[संपादित करें]