Double Commander एंड्री सोरोकिन द्वारा लिखित मुफ़्त लाइब्रेरी TRegExpr का उपयोग करता है।
अधिकांश स्पष्टीकरण उस लाइब्रेरी की सहायता फ़ाइल से लिए गए हैं।
नियमित अभिव्यक्ति (Regular Expressions) पाठ्य खोज पैटर्न निर्दिष्ट करने का एक व्यापक रूप से उपयोग किया जाने वाला तरीका है। विशेष वर्ण (मेटा-वर्ण) हमें यह निर्दिष्ट करने की अनुमति देते हैं, उदाहरण के लिए, कि हम जिस विशिष्ट स्ट्रिंग की खोज कर रहे हैं वह पंक्ति की शुरुआत या अंत में दिखाई देती है, या इसमें किसी वर्ण या वर्ण समूह के n बार होने की स्थिति शामिल है।
Double Commander निम्नलिखित सुविधाओं में नियमित अभिव्यक्तियों का समर्थन करता है:
TRegExp लाइब्रेरी दो ऑपरेशन मोड का समर्थन करती है: ANSI और Unicode। पाठ फ़ाइलों में खोज करते समय, Double Commander दोनों का उपयोग करता है (फ़ाइल एन्कोडिंग के आधार पर)। नाम से खोज करते समय, यूनिकोड का उपयोग किया जाता है।
कोई भी एकल वर्ण स्वयं से मेल खाता है, जब तक कि वह नीचे वर्णित विशेष अर्थ वाला मेटा-वर्ण न हो।
वर्णों की एक श्रृंखला लक्ष्य स्ट्रिंग में वर्णों की उसी श्रृंखला से मेल खाती है, इसलिए पैटर्न bluh लक्ष्य स्ट्रिंग में bluh से मेल खाएगा।
हम मेटा-वर्णों या एस्केप अनुक्रमों के आगे बैकस्लैश \ जोड़कर उन्हें शाब्दिक रूप से व्याख्यायित करवा सकते हैं, उदाहरण के लिए: मेटा-वर्ण ^ स्ट्रिंग की शुरुआत से मेल खाता है, लेकिन \^ वर्ण ^ से मेल खाता है, \\ वर्ण \ से मेल खाता है, आदि।
यहाँ कुछ उदाहरण दिए गए हैं:
| सरल मिलान के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foobar |
स्ट्रिंग foobar से मेल खाता है |
\^FooBarPtr |
^FooBarPtr से मेल खाता है |
C और Perl में उपयोग किए जाने वाले समान एस्केप अनुक्रम सिंटैक्स का उपयोग करके वर्णों को निर्दिष्ट किया जा सकता है: \n न्यूलाइन वर्ण से मेल खाता है, \t टैब वर्ण से मेल खाता है, आदि।
अधिक सामान्यतः, \xnn, जहाँ nn हेक्साडेसिमल अंकों की एक श्रृंखला है, nn के ASCII मान वाले वर्ण से मेल खाता है।
यदि आपको व्यापक (यूनिकोड) वर्ण कोड की आवश्यकता है, तो आप \x{nnnn} का उपयोग कर सकते हैं, जहाँ nnnn – एक या अधिक हेक्साडेसिमल अंक हैं।
| एस्केप अनुक्रम | |
|---|---|
| अभिव्यक्ति | परिणाम |
\xnn |
ASCII कोड nn वाला वर्ण |
\x{nnnn} |
ASCII कोड nnnn वाला वर्ण (सामान्य पाठ के लिए एक बाइट, यूनिकोड के लिए दो बाइट) |
\t |
टैब वर्ण (HT/TAB), \x09 के समान |
\n |
न्यूलाइन वर्ण (NL/LF), \x0a के समान |
\r |
कैरिज रिटर्न वर्ण (CR), \x0d के समान |
\f |
फॉर्म फीड वर्ण (FF), \x0c के समान |
\a |
अलर्ट (बेल) (BEL), \x07 के समान |
\e |
एस्केप (ESC), \x1b के समान |
यहाँ कुछ उदाहरण दिए गए हैं:
| एस्केप अनुक्रम के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foo\x20bar |
foo bar से मेल खाता है (बीच में स्पेस पर ध्यान दें) |
\tfoobar |
टैब द्वारा पूर्वनिर्धारित foobar से मेल खाता है |
आप वर्णों की सूची को [] में रखकर एक वर्ण वर्ग निर्दिष्ट कर सकते हैं, जो सूची में से किसी भी एक वर्ण से मेल खाएगा।
यदि [ के बाद पहला वर्ण ^ है, तो वर्ग सूची में शामिल नहीं होने वाले किसी भी वर्ण से मेल खाता है।
सूची में, - वर्ण का उपयोग सीमा (Range) निर्दिष्ट करने के लिए किया जाता है, इसलिए a-z का अर्थ a से z तक के सभी वर्ण हैं, जिसमें दोनों शामिल हैं।
यदि आप चाहते हैं कि स्वयं - वर्ग का सदस्य बने, तो इसे सूची के आरंभ या अंत में रखें, या बैकस्लैश से एस्केप करें।
यदि आप ] का उपयोग करना चाहते हैं, तो आप इसे सूची के आरंभ में रख सकते हैं या बैकस्लैश से एस्केप कर सकते हैं।
| वर्ण वर्ग | |
|---|---|
| अभिव्यक्ति | परिणाम |
[-az] |
a, z और - से मेल खाता है |
[az-] |
a, z और - से मेल खाता है |
[a\-z] |
a, z और - से मेल खाता है |
[a-z] |
a से z तक के सभी 26 लोअरकेस अक्षरों से मेल खाता है |
[\n-\x0D] |
किसी भी \x10, \x11, \x12, \x13 से मेल खाता है |
[\d-t] |
किसी भी संख्या, - या t से मेल खाता है |
[]-a] |
] से a तक के किसी भी वर्ण से मेल खाता है |
यहाँ कुछ उदाहरण दिए गए हैं:
| वर्ण वर्ग के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foob[aeiou]r |
foobar, foober आदि जैसी स्ट्रिंग्स ढूंढता है, लेकिन foobbr, foobcr आदि नहीं। |
foob[^aeiou]r |
foobbr, foobcr आदि जैसी स्ट्रिंग्स ढूंढता है, लेकिन foobar, foober आदि नहीं। |
मेटा-वर्ण नियमित अभिव्यक्तियों के मूल तत्व हैं, ये विशेष वर्ण हैं।
विभिन्न प्रकार के मेटा-वर्ण होते हैं, जैसा कि नीचे वर्णित है।
कुछ अभिव्यक्तियाँ पंक्ति विभाजक का पता लगाने में मदद करती हैं।
| पंक्ति विभाजक | |
|---|---|
| अभिव्यक्ति | परिणाम |
^ |
पंक्ति की शुरुआत (Line start) |
$ |
पंक्ति का अंत (Line end) |
\A |
पाठ की शुरुआत (Text start) |
\Z |
पाठ का अंत (Text end) |
. |
पंक्ति में कोई भी वर्ण |
यहाँ कुछ उदाहरण दिए गए हैं:
| पंक्ति विभाजक के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
^foobar |
केवल तभी मेल खाता है जब स्ट्रिंग foobar पंक्ति की शुरुआत में हो |
foobar$ |
केवल तभी मेल खाता है जब स्ट्रिंग foobar पंक्ति के अंत में हो |
^foobar$ |
केवल तभी मेल खाता है जब स्ट्रिंग foobar पंक्ति की एकमात्र स्ट्रिंग हो |
foob.r |
foobar, foobbr, foob1r जैसी स्ट्रिंग्स से मेल खाता है |
डिफ़ॉल्ट रूप से, ^ मेटा-वर्ण केवल इनपुट स्ट्रिंग/टेक्स्ट की शुरुआत में मेल खाने की गारंटी देता है, और $ मेटा-वर्ण केवल अंत में मेल खाता है। एम्बेडेड पंक्ति विभाजक ^ या $ से मेल नहीं खाएंगे।
हालाँकि, आप स्ट्रिंग को एक बहु-पंक्ति बफ़र (Multi-line buffer) के रूप में मानना चाह सकते हैं, ताकि ^ स्ट्रिंग के भीतर किसी भी पंक्ति विभाजक के बाद मेल खाए, और $ किसी भी पंक्ति विभाजक से पहले मेल खाए। आप संशोधक m (Modifier m) को चालू करके ऐसा कर सकते हैं।
\A और \Z बिल्कुल ^ और $ की तरह हैं, लेकिन जब संशोधक m का उपयोग किया जाता है, तो वे कई बार मेल नहीं खाते हैं, जबकि ^ और $ प्रत्येक आंतरिक पंक्ति विभाजक पर मेल खाएंगे।
डिफ़ॉल्ट रूप से, . मेटा-वर्ण किसी भी वर्ण से मेल खाता है, लेकिन यदि आप संशोधक s (Modifier s) को बंद करते हैं, तो . एम्बेडेड पंक्ति विभाजकों से मेल नहीं खाएगा।
TRegExpr यूनिकोड तकनीकी मानक (तकनीकी मानक #18) के अनुसार पंक्ति विभाजकों को संभालता है:
^ इनपुट स्ट्रिंग की शुरुआत में, और यदि संशोधक m चालू है, तो \x0D\x0A या \x0A या \x0D के किसी भी होने के बाद भी (यूनिकोड समर्थन: \x2028 या \x2029 या \x0B या \x0C या \x85)। ध्यान दें कि \x0D\x0A अनुक्रम में कोई खाली पंक्ति नहीं होती है।
$ इनपुट स्ट्रिंग के अंत में, और यदि संशोधक m चालू है, तो \x0D\x0A या \x0A या \x0D के किसी भी होने से पहले भी (यूनिकोड समर्थन: \x2028 या \x2029 या \x0B या \x0C या \x85)। ध्यान दें कि \x0D\x0A अनुक्रम में कोई खाली पंक्ति नहीं होती है।
. किसी भी वर्ण से मेल खाता है, लेकिन यदि संशोधक s बंद है, तो . \x0D\x0A और \x0A और \x0D से मेल नहीं खाता है (यूनिकोड समर्थन: \x2028 और \x2029 और \x0B और \x0C और \x85)।
ध्यान दें कि ^.*$ (खाली पंक्ति पैटर्न) \x0D\x0A अनुक्रम में एक खाली स्ट्रिंग से मेल नहीं खाएगा, लेकिन \x0A\x0D अनुक्रम में एक खाली स्ट्रिंग से मेल खाएगा।
कुछ अभिव्यक्तियाँ वर्ण समूहों का पता लगाने में मदद करती हैं।
| पूर्वनिर्धारित वर्ग | |
|---|---|
| अभिव्यक्ति | परिणाम |
\w |
अल्फ़ान्यूमेरिक वर्ण (जिसमें _ शामिल है), यानी [0-9A-Za-z_] |
\W |
गैर-अल्फ़ान्यूमेरिक वर्ण |
\d |
अंक वर्ण (Digit character) |
\D |
गैर-अंक वर्ण |
\s |
कोई भी स्पेस वर्ण ([ \t\n\r\f] के समान) |
\S |
गैर-स्पेस वर्ण |
आप कस्टम वर्ण वर्गों में \w, \d और \s का उपयोग कर सकते हैं।
यहाँ कुछ उदाहरण दिए गए हैं:
| पूर्वनिर्धारित वर्ग के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foob\dr |
foob1r, foob6r जैसी स्ट्रिंग्स से मेल खाता है, लेकिन foobar, foobbr आदि से नहीं |
foob[\w\s]r |
foobar, foob r, foobbr जैसी स्ट्रिंग्स से मेल खाता है, लेकिन foob=r आदि से नहीं |
एक शब्द सीमा (\b) दो वर्णों के बीच की स्थिति होती है, जिसमें एक तरफ \w और दूसरी तरफ \W होता है (किसी भी क्रम में), स्ट्रिंग के शुरू और अंत के काल्पनिक वर्णों को \W से मेल खाता हुआ माना जाता है।
| शब्द सीमा | |
|---|---|
| अभिव्यक्ति | परिणाम |
\b |
शब्द सीमा से मेल खाता है |
\B |
गैर-शब्द सीमा से मेल खाता है |
नियमित अभिव्यक्ति के किसी भी आइटम के बाद एक अन्य प्रकार का मेटा-वर्ण हो सकता है – इटरेटर।
इन मेटा-वर्णों का उपयोग करके, आप पिछले वर्ण, मेटा-वर्ण या उप-अभिव्यक्ति की पुनरावृत्ति की संख्या निर्दिष्ट कर सकते हैं।
| इटरेटर (Iterators) | |
|---|---|
| अभिव्यक्ति | परिणाम |
* |
शून्य या अधिक बार ("लालची" / Greedy), {0,} के समान |
+ |
एक या अधिक बार ("लालची"), {1,} के समान |
? |
शून्य या एक बार ("लालची"), {0,1} के समान |
{n} |
सटीक रूप से n बार ("लालची") |
{n,} |
कम से कम n बार ("लालची") |
{n,m} |
कम से कम n बार लेकिन m बार से अधिक नहीं ("लालची") |
*? |
शून्य या अधिक बार ("गैर-लालची" / Lazy), {0,}? के समान |
+? |
एक या अधिक बार ("गैर-लालची"), {1,}? के समान |
?? |
शून्य या एक बार ("गैर-लालची"), {0,1}? के समान |
{n}? |
सटीक रूप से n बार ("गैर-लालची") |
{n,}? |
कम से कम n बार ("गैर-लालची") |
{n,m}? |
कम से कम n बार लेकिन m बार से अधिक नहीं ("गैर-लालची") |
इस प्रकार, कर्ली कोष्ठकों में संख्याएँ, जैसे {n,m}, मेल खाने वाले आइटम की न्यूनतम संख्या n और अधिकतम संख्या m निर्दिष्ट करती हैं।
प्रारूप {n} {n,n} के समकक्ष है, और सटीक रूप से n बार मेल खाता है।
प्रारूप {n,} n या अधिक बार मेल खाता है।
n या m के आकार पर कोई सैद्धांतिक सीमा नहीं है, लेकिन बड़ी संख्याएँ निष्पादन की गति को धीमा कर सकती हैं और अधिक मेमोरी की खपत कर सकती हैं।
यदि कर्ली कोष्ठक किसी अन्य संदर्भ में दिखाई देते हैं, तो उन्हें सामान्य वर्ण माना जाता है।
यहाँ कुछ उदाहरण दिए गए हैं:
| इटरेटर के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foob.*r |
foobar, foobalkjdflkj9r और foobr जैसी स्ट्रिंग्स से मेल खाता है |
foob.+r |
foobar, foobalkjdflkj9r जैसी स्ट्रिंग्स से मेल खाता है, लेकिन foobr नहीं |
foob.?r |
foobar, foobbr और foobr जैसी स्ट्रिंग्स से मेल खाता है, लेकिन foobalkj9r नहीं |
fooba{2}r |
स्ट्रिंग foobaar से मेल खाता है |
fooba{2,}r |
foobaar, foobaaar, foobaaaar जैसी स्ट्रिंग्स से मेल खाता है |
fooba{2,3}r |
foobaar या foobaaar जैसी स्ट्रिंग्स से मेल खाता है, लेकिन foobaaaar नहीं |
"लालचीपन (Greediness)" के बारे में थोड़ा स्पष्टीकरण:
"लालची" जितना संभव हो उतना अधिक लेता है, और "गैर-लालची" जितना संभव हो उतना कम लेता है।
उदाहरण के लिए, स्ट्रिंग abbbbc पर लागू होने पर b+ और b* bbbb लौटाते हैं, b+? b लौटाता है, b*? खाली स्ट्रिंग लौटाता है, b{2,3}? bb लौटाता है, और b{2,3} bbb लौटाता है।
आप सभी इटरेटर को "गैर-लालची" मोड में बदल सकते हैं (देखें संशोधक g)।
आप पैटर्न के लिए विकल्पों की एक श्रृंखला निर्दिष्ट करने के लिए | का उपयोग कर सकते हैं, इसलिए fee|fie|foe लक्ष्य स्ट्रिंग में fee, fie या foe से मेल खाएगा (f(e|i|o)e भी वही काम करेगा)।
पहला विकल्प पिछले पैटर्न विभाजक ((, [ या पैटर्न की शुरुआत) से पहले | तक सब कुछ शामिल करता है, और अंतिम विकल्प अंतिम | से अगले पैटर्न विभाजक तक सब कुछ शामिल करता है।
इसलिए, विकल्पों को कोष्ठक में रखना एक सामान्य अभ्यास है ताकि यह भ्रम न रहे कि वे कहाँ से शुरू और समाप्त होते हैं।
विकल्पों को बाएं से दाएं आजमाया जाता है, इसलिए पहला विकल्प जो पूरे अभिव्यक्ति से मेल खाता है उसे चुना जाता है।
इसका मतलब है कि विकल्प हमेशा लालची नहीं होते हैं।
उदाहरण के लिए: जब barefoot को foo|foot के साथ मिलाया जाता है, तो केवल foo भाग मेल खाएगा, क्योंकि यह पहला विकल्प है जिसे आजमाया गया था, और यह लक्ष्य स्ट्रिंग से सफलतापूर्वक मेल खा गया। (जब हम मिलान किए गए टेक्स्ट को कैप्चर करने के लिए कोष्ठक का उपयोग करते हैं, तो यह उतना महत्वपूर्ण नहीं हो सकता है।)
यह भी याद रखें कि | को चौकोर कोष्ठकों (Square brackets) के भीतर शाब्दिक रूप से व्याख्यायित किया जाता है, इसलिए यदि आप [fee|fie|foe] लिखते हैं, तो यह वास्तव में केवल [feio|] से मेल खाता है।
उदाहरण:
| विकल्प के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
foo(bar|foo) |
स्ट्रिंग foobar या foofoo से मेल खाता है |
कोष्ठक संरचना ( ... ) का उपयोग नियमित अभिव्यक्ति उप-अभिव्यक्तियों (Subexpressions) को परिभाषित करने के लिए भी किया जा सकता है।
खोजने के बाद, आप किसी भी उप-अभिव्यक्ति को वापस बुला सकते हैं, और उप-अभिव्यक्ति को मास्क के रूप में भी उपयोग कर सकते हैं।
उप-अभिव्यक्तियों को उनके बाएं कोष्ठक के बाएं से दाएं क्रम के आधार पर क्रमांकित किया जाता है।
पहली उप-अभिव्यक्ति का नंबर 1 है, और अधिकतम 90 उप-अभिव्यक्तियों का समर्थन किया जाता है (पूरी नियमित अभिव्यक्ति मिलान को 0 नंबर दिया जाता है – आप इसे $0 या $& से बदल सकते हैं)।
यहाँ कुछ उदाहरण दिए गए हैं:
| उप-अभिव्यक्ति | |
|---|---|
| अभिव्यक्ति | परिणाम |
(foobar){8,10} |
उन स्ट्रिंग्स से मेल खाता है जिनमें foobar के 8, 9 या 10 उदाहरण शामिल हैं |
foob([0-9]|a+)r |
foob0r, foob1r, foobar, foobaar, foobaar आदि से मेल खाता है |
"रिप्लेस (Replace)" टेम्प्लेट के बारे में महत्वपूर्ण टिप्पणियाँ:
$ या \ रखना चाहते हैं, तो उपसर्ग \ का उपयोग करें।1\$ is $2\\rub\\ परिणाम के रूप में 1$ is <subexpr2>\rub\ लौटाएगा।$n के बाद एक वास्तविक संख्या रखना चाहते हैं, तो आपको n को कर्ली कोष्ठक {} में रखना होगा।a$12bc परिणाम a<subexpr12>bc लौटाएगा, लेकिन a${1}2bc परिणाम a<subexpr1>2bc लौटाएगा।उदाहरण:
आइए तिथि 21.01.2018 को उलटकर 2018.01.21 करें:
खोजें: (\d{2})\.(\d{2})\.(\d{4})
बदलें: $3.$2.$1
मेटा-वर्ण \1 से \9 को बैकरेफरेंस के रूप में व्याख्यायित किया जाता है। \n पहले मिलान किए गए उप-अभिव्यक्ति n से मेल खाता है।
यहाँ कुछ उदाहरण दिए गए हैं:
| बैकरेफरेंस के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
(.)\1+ |
aaaa और cc से मेल खाता है |
(.+)\1+ |
abab और 123123 से भी मेल खाता है |
(['"]?)(\d+)\1 |
"13" (डबल कोट्स में), '4' (सिंगल कोट्स में) या 77 (बिना कोट्स के) आदि से मेल खाता है |
सकारात्मक पूर्वदृष्टि (Positive Lookahead): foo(?=bar) केवल bar से पहले आने वाले foo से मेल खाता है, और bar मिलान में शामिल नहीं होता है।
नकारात्मक पूर्वदृष्टि (Negative Lookahead): foo(?!bar) केवल तभी foo से मेल खाता है जब उसके बाद bar न हो।
सकारात्मक पश्चदृष्टि (Positive Lookbehind): (?<=foo)bar केवल foo के बाद आने वाले bar से मेल खाता है, और foo मिलान में शामिल नहीं होता है।
नकारात्मक पश्चदृष्टि (Negative Lookbehind): (?<!foo)bar केवल तभी bar से मेल खाता है जब उसके पहले foo न हो।
सीमाएं (Limitations):
पूर्वदृष्टि के कोष्ठक अभिव्यक्ति के अंत में होने चाहिए, पश्चदृष्टि के कोष्ठक अभिव्यक्ति की शुरुआत में होने चाहिए। इसलिए विकल्पों | के बीच या समूहों के भीतर दावों का समर्थन नहीं किया जाता है।
पश्चदृष्टि (?<!foo)bar के लिए, नियमित अभिव्यक्ति foo की लंबाई निश्चित होनी चाहिए, यानी इसमें केवल निश्चित लंबाई के मिलान संचालन शामिल होने चाहिए। क्वांटिफायर (Quantifiers) की अनुमति नहीं है, केवल दोहराव संख्याओं {n} या {n,n} वाले कर्ली कोष्ठकों को छोड़कर। यहाँ वर्ण वर्गों, डॉट्स, और \b तथा \B की अनुमति है। समूहों और विकल्पों की अनुमति नहीं है।
अन्य 3 प्रकार के दावों के लिए, कोष्ठकों में अभिव्यक्ति किसी भी जटिलता की हो सकती है।
सिंटैक्स: (?:expr)।
इस प्रकार के समूह में कोई "इंडेक्स" नहीं होता है, और यह बैकरेफरेंस के लिए अदृश्य होता है। जब हम उप-अभिव्यक्तियों को समूहीकृत करना चाहते हैं लेकिन उन्हें स्ट्रिंग के मिलान/कैप्चर किए गए भाग के रूप में सहेजना नहीं चाहते हैं, तो गैर-कैप्चरिंग समूह का उपयोग किया जाता है। गैर-कैप्चरिंग समूहों का उपयोग करने से नियमित अभिव्यक्ति की कार्य गति बढ़ सकती है।
| गैर-कैप्चरिंग समूह | |
|---|---|
| अभिव्यक्ति | परिणाम |
(https?|ftp)://([^/\r\n]+) |
https://doublecmd.sourceforge.io में https और doublecmd.sourceforge.io से मेल खाता है |
(?:https?|ftp)://([^/\r\n]+) |
https://doublecmd.sourceforge.io में केवल doublecmd.sourceforge.io से मेल खाता है |
सिंटैक्स: (?>expr|expr|...)।
परमाणु समूह गैर-कैप्चरिंग समूहों का एक विशेष मामला है: यदि पैटर्न का एक हिस्सा पहले से ही मिल गया है, तो इस प्रकार का समूहीकरण कोष्ठक समूह के लिए बैकट्रैकिंग (Backtracking) को अक्षम कर देता है। परमाणु समूह अधिक तेज़ी से काम करते हैं और कई अलग-अलग अभिव्यक्तियों वाले समूहों को अनुकूलित करने के लिए उपयोगी होते हैं।
उदाहरण के लिए, a(bc|b)c abcc और abc दोनों से मेल खाता है, लेकिन a(?>bc|b)c केवल abcc से मेल खाता है, abc से नहीं, क्योंकि इंजन को बैकट्रैक करने और समूह को b पर सेट करने का प्रयास करने से रोक दिया जाता है।
यूनिकोड मानक वर्ण श्रेणियों को नाम देता है। ये 2-अक्षरों की स्ट्रिंग्स होती हैं। उदाहरण के लिए, Lu बड़े अक्षरों का प्रतिनिधित्व करता है, और Ll छोटे अक्षरों का। 1-अक्षर की बड़ी श्रेणी L सभी अक्षरों का प्रतिनिधित्व करती है।
| यूनिकोड श्रेणियां | |
|---|---|
| श्रेणी | विवरण |
L | अक्षर (Letters) |
Lu | बड़े अक्षर (Uppercase letter) |
Ll | छोटे अक्षर (Lowercase letter) |
Lt | शीर्षक केस अक्षर (Titlecase letter) |
Lm | संशोधक अक्षर (Modifier letter) |
Lo | अन्य अक्षर (Other letter) |
M | चिह्न (Mark) |
Mn | गैर-दूरी चिह्न (Non-spacing mark) |
Mc | दूरी संयोजन चिह्न (Spacing combining mark) |
Me | लपेटने वाला चिह्न (Enclosing mark) |
N | संख्या (Number) |
Nd | दशमलव अंक (Decimal digit) |
Nl | अक्षर संख्या (Letter number) |
No | अन्य संख्या (Other number) |
P | विराम चिह्न (Punctuation) |
Pc | कनेक्टर विराम चिह्न (Connector punctuation) |
Pd | डैश विराम चिह्न (Dash punctuation) |
Ps | प्रारंभिक विराम चिह्न (Open punctuation) |
Pe | समापन विराम चिह्न (Close punctuation) |
Pi | प्रारंभिक उद्धरण चिह्न (Initial punctuation) |
Pf | अंतिम उद्धरण चिह्न (Final punctuation) |
Po | अन्य विराम चिह्न (Other punctuation) |
S | प्रतीक (Symbol) |
Sm | गणितीय प्रतीक (Math symbol) |
Sc | मुद्रा प्रतीक (Currency symbol) |
Sk | संशोधक प्रतीक (Modifier symbol) |
So | अन्य प्रतीक (Other symbol) |
Z | विभाजक (Separator) |
Zs | स्पेस विभाजक (Space separator) |
Zl | पंक्ति विभाजक (Line separator) |
Zp | पैराग्राफ विभाजक (Paragraph separator) |
C | अन्य (Other) |
Cc | नियंत्रण (Control) |
Cf | प्रारूप (Format) |
Cs | सरोगेट (Surrogate) |
Co | निजी उपयोग (Private use) |
Cn | अनिर्धारित (Unassigned) |
मेटा-वर्ण \p निर्दिष्ट श्रेणी के एक यूनिकोड वर्ण को दर्शाता है। सिंटैक्स: 1-अक्षर वाले नामों के लिए \pL और \p{L}, 2-अक्षर वाले नामों के लिए \p{Lu}।
मेटा-वर्ण \P इसका विपरीत है, यह उस यूनिकोड वर्ण को दर्शाता है जो निर्दिष्ट श्रेणी में नहीं है।
वर्ण वर्ग में भी इन मेटा-वर्णों का समर्थन किया जाता है।
एकल संशोधक का सिंटैक्स: चालू करने के लिए (?i), बंद करने के लिए (?-i)। एकाधिक संशोधकों की अनुमति है, जैसे: (?msgxr-imsgxr)।
संशोधकों का उपयोग नियमित अभिव्यक्तियों के व्यवहार को बदलने के लिए किया जाता है। संशोधक केवल (?imsgxr-imsgxr) ऑपरेटर के बाद आने वाले नियमित अभिव्यक्ति के भाग को प्रभावित करते हैं।
इनमें से किसी भी संशोधक को स्वयं नियमित अभिव्यक्ति में एम्बेड किया जा सकता है। यदि किसी संशोधक को किसी उप-अभिव्यक्ति के अंदर इनलाइन किया जाता है, तो यह केवल उस उप-अभिव्यक्ति को प्रभावित करता है।
^ और $ को केवल स्ट्रिंग की शुरुआत या अंत से मिलान करने के बजाय स्ट्रिंग के भीतर किसी भी पंक्ति की शुरुआत या अंत से मिलान करने के लिए बदलता है, कृपया पंक्ति विभाजक भी देखें। डिफ़ॉल्ट रूप से बंद रहता.. को किसी भी वर्ण, यहाँ तक कि पंक्ति विभाजक से भी मेल खाने के लिए बदलता है (कृपया पंक्ति विभाजक भी देखें), जिससे यह सामान्यतः मेल नहीं खाता। डिफ़ॉल्ट रूप से चालू रहता है।g बंद है, तो + का कार्य +? की तरह होगा, * का कार्य *? की तरह होगा, आदि।а-я में अतिरिक्त रूप से रूसी अक्षर ё शामिल होता है, А-Я में अतिरिक्त रूप से Ё शामिल होता है, और а-Я में सभी रूसी अक्षर शामिल होते हैं। डिफ़ॉल्ट रूप से चालू रहता है।text को अनदेखा किया जाता है। ध्यान दें कि TRegExpr ) देखने पर टिप्पणी बंद कर देता है, इसलिए टिप्पणी में एक वास्तविक ) रखना संभव नहीं है।यहाँ कुछ उदाहरण दिए गए हैं:
| Perl एक्सटेंशन के उदाहरण | |
|---|---|
| अभिव्यक्ति | परिणाम |
(?i)Saint-Petersburg |
Saint-petersburg और Saint-Petersburg से मेल खाता है |
(?i)Saint-(?-i)Petersburg |
Saint-Petersburg से मेल खाता है, लेकिन Saint-petersburg नहीं |
(?i)(Saint-)?Petersburg |
Saint-petersburg और saint-petersburg से मेल खाता है |
((?i)Saint-)?Petersburg |
saint-Petersburg से मेल खाता है, लेकिन saint-petersburg नहीं |
संशोधक x को अपने आप में अधिक स्पष्टीकरण की आवश्यकता है।
यह रिक्त स्थानों को अनदेखा करने का निर्देश देता है, जो न तो बैकस्लैश से सुरक्षित होते हैं और न ही किसी वर्ण वर्ग के भीतर होते हैं।
आप इसका उपयोग अपनी नियमित अभिव्यक्ति को (थोड़ा) अधिक पठनीय भागों में विभाजित करने के लिए कर सकते हैं।
# वर्ण को टिप्पणी शुरू करने वाले मेटा-वर्ण के रूप में भी माना जाता है, उदाहरण के लिए:
(
(abc) # टिप्पणी 1
| # आप रिक्त स्थान का उपयोग नियमित अभिव्यक्ति को प्रारूपित करने के लिए कर सकते हैं - TRegExpr इसे अनदेखा करेगा
(efg) # टिप्पणी 2
)
इसका यह भी अर्थ है कि यदि आप पैटर्न में वास्तविक रिक्त स्थान या # वर्ण का उपयोग करना चाहते हैं (वर्ण वर्गों के बाहर, जो x से प्रभावित नहीं होते हैं), तो आपको उन्हें एस्केप करना होगा या ऑक्टल या हेक्साडेसिमल एस्केप का उपयोग करके एन्कोड करना होगा।
कुल मिलाकर, ये सुविधाएँ नियमित अभिव्यक्ति पाठ की पठनीयता में अत्यधिक सुधार करती हैं।