के माध्यम से साझा करें


नियमित व्यंजक

IsMatch, Match, और MatchAll फ़ंक्शन का उपयोग पाठ में पैटर्न निकालने और मान्य करने के लिए किया जाता है। वे जिस पैटर्न का उपयोग करते हैं उसे नियमित अभिव्यक्ति कहा जाता है।

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

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

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

नोट

Power Apps Power Fx नियमित अभिव्यक्ति के पुराने संस्करण का उपयोग करता है, जिसमें कम सीमाएँ हैं लेकिन कम सुविधाएँ भी हैं। MatchOptions.DotAll और MatchOptions.FreeSpacing उपलब्ध नहीं हैं और Match.Email और Match.Hyphen की परिभाषाएं भिन्न हैं। यूनिकोड सरोगेट जोड़ों को एकल वर्ण के रूप में नहीं माना जाता। MatchOptions.NumberedSubMatches डिफ़ॉल्ट है. यहां वर्णित नियमित अभिव्यक्तियों का संस्करण "V1.0 संगतता" स्विच के अंतर्गत शीघ्र ही उपलब्ध होगा। Power Apps Power Fx

समर्थित सुविधा

Power Fx निम्नलिखित नियमित अभिव्यक्ति सुविधाओं का समर्थन करता है, साथ ही इस पर नोट्स भी देता है कि व्यवहार अन्य प्रणालियों से किस प्रकार भिन्न हो सकता है। Power Fx

नियमित अभिव्यक्ति स्थिर होनी चाहिए तथा किसी चर में गणना या संग्रहीत नहीं होनी चाहिए। & ऑपरेटर, स्ट्रिंग इंटरपोलेशन $"{...}", और Concatenate, Char, और UniChar स्थिर तर्कों वाले फ़ंक्शन समर्थित हैं।

शाब्दिक अक्षर

लक्षण विवरण
शाब्दिक अक्षर \, [, ], ^, $, ., |, ?, *, +, (, ), {, और } को छोड़कर कोई भी यूनिकोड वर्ण सीधे डाला जा सकता है। MatchOptions.FreeSpacing, #, , तथा अन्य \s का उपयोग करते समय स्पेस वर्णों को एस्केप किया जाना चाहिए, क्योंकि उनका अर्थ भिन्न होता है।
बच निकले शाब्दिक अक्षर \ (बैकस्लैश) के बाद कोई प्रत्यक्ष अक्षर, जैसे कि \? प्रश्न चिह्न डालने के लिए। \# और \ का उपयोग तब भी किया जा सकता है जब MatchOptions.FreeSpacing संगतता के लिए अक्षम किया गया हो।
हेक्साडेसिमल और यूनिकोड वर्ण कोड \x20 ठीक दो हेक्साडेसिमल अंकों के साथ, \u2028 ठीक चार हेक्साडेसिमल अंकों के साथ और उच्च और निम्न सरोगेट्स के लिए इस्तेमाल किया जा सकता है।
यूनिकोड कोड बिंदु \u{01F47B} अधिकतम आठ हेक्साडेसिमल अंकों के साथ. यह 0 से U+10FFFF की सीमा में होना चाहिए तथा इसका उपयोग उच्च या निम्न सरोगेट के लिए नहीं किया जा सकता। यदि U+FFFF से अधिक हो तो इसका परिणाम सरोगेट जोड़ी (दो अक्षर) हो सकता है।
कैरिज रिटर्न \r, बराबर। Char(13)
न्यूलाइन वर्ण \n, बराबर। Char(10)
फ़ीड बनाएं \f, बराबर। Char(12)
क्षैतिज टैब \t, बराबर। Char(9)

इसके बजाय \x या \u का उपयोग करें। वर्णों के लिए अष्टाधारी कोड, जैसे \044 या \o{044} की अनुमति नहीं है, क्योंकि वे क्रमांकित पश्च संदर्भों के साथ अस्पष्ट हो सकते हैं।

\v समर्थित नहीं है क्योंकि यह नियमित अभिव्यक्ति भाषाओं में अस्पष्ट है. ऊर्ध्वाधर टैब के लिए \x0b या ऊर्ध्वाधर रिक्त स्थान के लिए [\x0b\f\r\n\x85\u2028\u2029] का प्रयोग करें।

इस प्रकार के दावे

दावे पाठ में किसी विशेष स्थिति से मेल खाते हैं, लेकिन किसी भी वर्ण का उपभोग नहीं करते हैं।

लक्षण विवरण
लाइन की शुरुआत ^, पाठ के आरंभ से मेल खाता है, या यदि MatchOptions.Multiline का उपयोग किया जाता है तो एक पंक्ति से मेल खाता है।
पंक्ति का अंत $, पाठ के अंत से मेल खाता है, या यदि MatchOptions.Multiline का उपयोग किया जाता है तो एक पंक्ति से मेल खाता है।
भविष्य का ध्यान करना (?=a) और (?!a), एक पैटर्न के लिए आगे मेल खाता है।
पीछे देखने के लिए (?<=b) और (?<!b), एक पैटर्न के लिए पीछे से मेल खाता है।
शब्द विराम \b और \B, अक्षरों की यूनिकोड परिभाषा का उपयोग करते हुए [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}].

$ किसी पंक्ति के अंत से मेल खाता है, जिसमें कोई भी अनुगामी \r\n, \r, या \n शामिल है।

लुकअहेड और लुकबिहाइंड अभिकथन में उप-मिलान या असीमित परिमाणक नहीं हो सकते, तथा उन्हें बाहर किसी परिमाणक के साथ प्रयोग नहीं किया जा सकता।

वर्ण वर्ग

लक्षण विवरण
डॉट ., \r और \n को छोड़कर सब कुछ से मेल खाता है जब तक कि MatchOptions.DotAll का उपयोग नहीं किया जाता है।
वर्ण वर्ग [abc] वर्णों की सूची, [a-fA-f0-9] वर्णों की श्रेणी, [^a-z] इन वर्णों के अलावा सब कुछ। वर्ण वर्गों को नेस्ट नहीं किया जा सकता, घटाया नहीं जा सकता, या प्रतिच्छेदित नहीं किया जा सकता, तथा कई विराम चिह्न पंक्ति में दो बार प्रकट नहीं हो सकते (@@, %%, !!, आदि)।
शब्द वर्ण \w और \W अक्षरों की यूनिकोड परिभाषा का उपयोग करना [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]\W नकारात्मक वर्ण वर्ग में उपयोग नहीं किया जा सकता.
अंकीय वर्ण \d 0 से 9 और \p{Nd} तक के अंक शामिल हैं, \D से मेल खाने वाले वर्णों को छोड़कर सब कुछ मेल खाता है। \d \D नकारात्मक वर्ण वर्ग में उपयोग नहीं किया जा सकता.
अंतरिक्ष वर्ण \s इसमें रिक्त स्थान वाले वर्ण [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}], \S शामिल हैं, जो \s से मेल खाने वाले वर्णों को छोड़कर बाकी सभी से मेल खाते हैं। \S नकारात्मक वर्ण वर्ग में उपयोग नहीं किया जा सकता.
यूनिकोड वर्ण श्रेणी \p{Ll} सभी यूनिकोड लोअरकेस अक्षरों से मेल खाता है, जबकि \P{Ll} उन सभी चीज़ों से मेल खाता है जो यूनिकोड लोअरकेस अक्षर नहीं हैं। \P{} नकारात्मक वर्ण वर्ग में उपयोग नहीं किया जा सकता.

स्पष्टता बढ़ाने और अस्पष्टता से बचने के लिए, वर्गाकार कोष्ठक वर्ण वर्ग अन्य नियमित अभिव्यक्ति भाषाओं की तुलना में अधिक प्रतिबंधात्मक हैं:

  • शाब्दिक हाइफ़न वर्णों को अवश्य ही छोड़ा जाना चाहिए। [\-a] या [-a] से मिलान करने के लिए - के बजाय a का प्रयोग करें.
  • आरंभिक वर्गाकार कोष्ठकों को अवश्य हटाया जाना चाहिए। [\[a] या [[] से मिलान करने के लिए [ के बजाय a का प्रयोग करें.
  • जब तक कि यह पहला अक्षर न हो और निषेध का संकेत न दे रहा हो, तब तक अक्षर को एस्केप किया जाना चाहिए। [a\^] या [a^] से मिलान करने के लिए ^ के बजाय a का प्रयोग करें.
  • कर्ली ब्रेसेज़ को एस्केप किया जाना चाहिए। [\{\}] या { से मिलान करने के लिए } का उपयोग करें।
  • रिक्त वर्ण वर्ग [] समर्थित नहीं है. किसी वर्ण वर्ग में बंद वर्गाकार कोष्ठक शामिल करने के लिए, उसे एस्केप करें।

\p{} और \P{} द्वारा समर्थित यूनिकोड वर्ण श्रेणियाँ:

  • पत्र: L, Lu, Ll, Lt, Lm, Lo
  • अंक: M, Mn, Mc, Me
  • संख्याएँ: N, Nd, Nl, No
  • विराम चिह्न: P, Pc, Pd, Ps, Pe, Pi, Pf, Po
  • प्रतीक: S, Sm, Sc, Sk, So
  • विभाजक: Z, Zs, Zl, Zp
  • नियंत्रण और स्वरूपण: Cc, Cf, जबकि अन्य C उपसर्ग श्रेणियां समर्थित नहीं हैं।

\W, \D, \S, और \P{} का उपयोग नकारात्मक वर्ण वर्ग [^...] के भीतर नहीं किया जा सकता। कुछ प्लेटफार्मों पर क्रियान्वयन के लिए, इन नकारात्मक वर्ण वर्गों को उनके यूनिकोड समकक्षों में अनुवादित किया जाता है, जो कि नकारात्मक होने पर करना कठिन हो सकता है।

U+10000 और U+10FFFF के बीच के यूनिकोड वर्ण, जिनके लिए सरोगेट युग्मों की आवश्यकता होती है, वर्ण वर्गों में समर्थित नहीं हैं।

परिमाणकों

लक्षण विवरण
लालची शून्य या एक ? शून्य या एक बार मिलान, जितना संभव हो उतना बड़ा मिलान के साथ।
लालची शून्य या अधिक * शून्य या अधिक बार मिलान, जितना संभव हो उतना बड़ा मिलान के साथ।
लालची एक या अधिक + एक या अधिक बार मिलान करता है, जितना संभव हो उतना बड़ा मिलान करता है।
कम से कम लालची तो नहीं {n,} कम से कम n बार मिलान करें, जितना संभव हो उतना बड़ा मिलान करें। उदाहरण के लिए, a{3,}aaaaa के सभी वर्णों से मेल खाता है।
N और m के बीच लालची {n,m} n और m बार के बीच मिलान, जितना संभव हो उतना बड़ा मिलान के साथ। उदाहरण के लिए, a{1,3} , aaaaa के पहले तीन अक्षरों से मेल खाता है।
आलसी शून्य या एक ?? शून्य या एक बार मिलान, जितना संभव हो उतना छोटा मिलान के साथ।
आलसी शून्य या अधिक *? शून्य या अधिक बार मिलान, जितना संभव हो उतना छोटा मिलान के साथ।
आलसी एक या अधिक +? एक या अधिक बार मिलान करता है, जितना संभव हो उतना छोटा मिलान करता है।
आलसी कम से कम n {n,}? कम से कम n बार मिलान करें, जितना संभव हो उतना छोटा मिलान करें। उदाहरण के लिए, a{3,}? केवल aaaaa के पहले तीन अक्षरों से मेल खाता है।
N और m के बीच आलसी {n,m}? n और m बार के बीच मिलान, जितना संभव हो उतना छोटा मिलान के साथ। उदाहरण के लिए, a{1,3}? केवल aaaaa के प्रथम वर्ण से मेल खाता है।
सटीक n {n} n बार मेल खाता है, बिल्कुल. उदाहरण के लिए, a{3} , aaaaa के ठीक तीन अक्षरों से मेल खाता है।

अधिकारपूर्ण परिमाणक समर्थित नहीं हैं.

उप-मिलानों और परिमाणकों को मिलाने की अपनी सीमाएँ हैं। अधिक जानकारी के लिए, देखें संभवतः रिक्त उप-मिलान.

समूहों

लक्षण विवरण
समूह ( और ) का उपयोग क्वांटिफायर लागू करने के लिए तत्वों को समूहीकृत करने के लिए किया जाता है। उदाहरण के लिए, (abc)+ मैच abcabc.
अदल-बदल a|b "a" या "b" से मेल खाता है, जिसे अक्सर समूह में उपयोग किया जाता है।
नामित सबमैच और बैक रेफरेंस (?<name>chars) nameनाम के साथ एक सबमैच कैप्चर करता है, जिसे \k<name> से संदर्भित किया जाता है। यदि MatchOptions.NumberedSubMatches सक्षम है तो इसका उपयोग नहीं किया जा सकता.
क्रमांकित सबमैच और पिछला संदर्भ जब MatchOptions.NumberedSubMatches सक्षम होता है, (a)\1के साथ संदर्भित सबमैच कैप्चर करता है.
नॉनकैप्चर समूह (?:a), परिणाम को नामित या क्रमांकित उप-मिलान के रूप में कैप्चर किए बिना समूह बनाता है। जब तक MatchOptions.NumberedSubMatches सक्षम न हो, तब तक सभी समूह गैर-कैप्चरिंग होते हैं।

नामित और क्रमांकित उप-मिलानों का एक साथ उपयोग नहीं किया जा सकता। डिफ़ॉल्ट रूप से, नामित उप-मिलान सक्षम होते हैं और स्पष्टता और रखरखाव के लिए पसंद किए जाते हैं, जबकि मानक कैप्चर समूह बेहतर प्रदर्शन के साथ गैर कैप्चर समूह बन जाते हैं। इस व्यवहार को MatchOptions.NumberedSubMatches के साथ बदला जा सकता है, जो पारंपरिक कैप्चर समूहों के लिए प्रदान करता है लेकिन नामित कैप्चर समूहों को अक्षम करता है। कुछ कार्यान्वयन क्रमांकित और नामित कैप्चर समूहों के मिश्रण को अलग-अलग तरीके से व्यवहार करते हैं, यही कारण है कि Power Fx इसे अनुमति नहीं देता है।

स्व-संदर्भित कैप्चर समूह समर्थित नहीं हैं, उदाहरण के लिए नियमित अभिव्यक्ति (a\1).

दो कैप्चर समूह एक ही नाम साझा नहीं कर सकते, उदाहरण के लिए, नियमित अभिव्यक्ति (?<id>\w+)|(?<id>\d+) समर्थित नहीं है।

नामित उप-मिलान का नाम \p{L} अक्षर या _ से शुरू होना चाहिए, और उन वर्णों के साथ \p{Nd} के साथ जारी रह सकता है। नामों की लंबाई 62 UTF-16 कोड इकाइयों तक सीमित है।

संभवतः रिक्त उप-मिलानों तथा पीछे देखने या आगे देखने के भीतर उप-मिलानों के लिए बैकरेफरेंस भी समर्थित नहीं हैं।

कुछ कार्यान्वयन प्रदर्शन में सुधार के लिए "स्पष्ट कैप्चर" विकल्प प्रदान करते हैं जो अनावश्यक है क्योंकि यह डिफ़ॉल्ट है। Power Fx MatchOptions.NumberedSubMatches इसे अक्षम कर देता है और अंतर्निहित क्रमांकित कैप्चर को सक्षम करता है।

उप-मिलानों और परिमाणकों को मिश्रित करने की अपनी सीमाएँ हैं। अधिक जानकारी के लिए संभवतः रिक्त उप-मिलान देखें.

टिप्पणियां

लक्षण विवरण
इनलाइन टिप्पणियाँ (?# comment here), जिसे टिप्पणी के रूप में नजरअंदाज कर दिया जाता है। टिप्पणी अगले बंद कोष्ठक के साथ समाप्त होती है, भले ही टिप्पणी में एक आरंभिक कोष्ठक हो।

नियमित अभिव्यक्तियों को प्रारूपित करने और टिप्पणी करने के विकल्प के लिए MatchOptions.FreeSpacing देखें।

इनलाइन विकल्प

लक्षण विवरण
इनलाइन विकल्प (?im) MatchOptions.IgnoreCase और MatchOptions.Multiline का उपयोग करने के समान है। नियमित अभिव्यक्ति के आरंभ में सेट किया जाना चाहिए.

समर्थित इनलाइन मोड [imsx] हैं. ये क्रमशः MatchOptions.IgnoreCase, MatchOptions.Multiline, MatchOptions.DotAll, और MatchOptions.FreeSpacing के अनुरूप हैं। n को भी संगतता के लिए स्वीकार किया जाता है, लेकिन इसका कोई प्रभाव नहीं होता क्योंकि यह डिफ़ॉल्ट है और MatchOptions.NumberedSubMatches के साथ असंगत है।

इनलाइन विकल्पों का उपयोग किसी विकल्प को अक्षम करने या उप-अभिव्यक्ति के लिए विकल्प सेट करने के लिए नहीं किया जा सकता।

विकल्प

मिलान विकल्प नियमित अभिव्यक्ति मिलान के व्यवहार को परिवर्तित करते हैं. विकल्पों को सक्षम करने के दो तरीके हैं, जिन्हें तब तक मिलाया जा सकता है जब तक कोई टकराव न हो:

  • MatchOptions enum मान को Match, MatchAll, और IsMatch के लिए तीसरे तर्क के रूप में पारित किया गया है। विकल्पों को & ऑपरेटर या Concatenate फ़ंक्शन के साथ जोड़ा जा सकता है, उदाहरण के लिए MatchOptions.DotAll & MatchOptions.FreeSpacing. सभी नियमित अभिव्यक्ति फ़ंक्शनों के लिए यह आवश्यक है कि MatchOptions एक स्थिर मान हो, इसकी गणना नहीं की जा सकती या इसे किसी चर में संग्रहीत नहीं किया जा सकता।
  • (?...) नियमित अभिव्यक्ति के आरंभ में उपसर्ग। विकल्पों को (?...) संरचना में एकाधिक अक्षरों के साथ जोड़ा जा सकता है, उदाहरण के लिए (?sx). कुछ विकल्पों में (?...) समतुल्य नहीं होता है, लेकिन समान प्रभाव प्राप्त करने के अन्य तरीके हो सकते हैं, उदाहरण के लिए MatchOptions.BeginsWith नियमित अभिव्यक्ति के आरंभ में ^ के समतुल्य है।

शामिल है

MatchOptions.Contains के साथ सक्षम, बिना किसी नियमित अभिव्यक्ति पाठ समतुल्य के. MatchOptions.Contains , Power Apps के बाहर के सभी फ़ंक्शनों के लिए डिफ़ॉल्ट है; Power Apps के भीतर MatchOptions.Complete , IsMatch के लिए डिफ़ॉल्ट है।

पूरा

MatchOptions.Complete के साथ सक्षम किया गया है या नियमित अभिव्यक्ति के आरंभ में और क्रमशः ^ और $ का उपयोग किया गया है।

BeginsWith

MatchOptions.BeginsWith के साथ सक्षम करें या नियमित अभिव्यक्ति के आरंभ में ^ का उपयोग करें।

इससे समाप्त होता है

MatchOptions.EndsWith के साथ सक्षम या नियमित अभिव्यक्ति के अंत में $ का उपयोग करें.

डॉटऑल

नियमित अभिव्यक्ति के प्रारंभ में MatchOptions.DotAll या (?s) के साथ सक्षम किया गया.

सामान्यतः dot . ऑपरेटर न्यूलाइन वर्णों [\n\x0b\f\r\x85\u2028\u2029] को छोड़कर सभी वर्णों से मेल खाता है। DotAll संशोधक के साथ, सभी वर्णों का मिलान किया जाता है, जिसमें नई पंक्तियाँ भी शामिल हैं।

इस उदाहरण में, केवल "Hello" का मिलान किया गया है क्योंकि डिफ़ॉल्ट रूप से . नई लाइन से मेल नहीं खाएगा:

Trim( Match( "Hello
              World", ".*" ).FullMatch )
// returns 
// "Hello"

लेकिन यदि हम DotAll संशोधक जोड़ते हैं, तो नई लाइन और उसके बाद के सभी अक्षर मेल खाते हैं:

Trim( Match( "Hello
              World", ".*", MatchOptions.DotAll ).FullMatch )
// returns 
// "Hello
// World"

फ्रीस्पेसिंग

नियमित अभिव्यक्ति के प्रारंभ में MatchOptions.FreeSpacing या (?x) के साथ सक्षम किया गया.

मुक्त स्पेसिंग से जटिल नियमित अभिव्यक्ति को पढ़ना और बनाए रखना आसान हो जाता है। नियम सरल हैं:

  • नियमित अभिव्यक्ति में रिक्त स्थान वाले वर्णों को अनदेखा कर दिया जाता है, जिसमें \s से मेल खाने वाले सभी वर्ण शामिल होते हैं। यदि रिक्त स्थान का मिलान करना वांछित है, तो \s, \ , \t, \r, या \n का उपयोग करें।
  • # एक टिप्पणी शुरू होती है जो पंक्ति के अंत तक चलती है। इसे और अगले न्यूलाइन वर्ण तक आने वाले सभी वर्णों ( . बिना MatchOptions.DotAll से मेल न खाने वाले वर्णों) को अनदेखा कर दिया जाता है।
  • इन परिवर्तनों में वर्ण वर्ग शामिल नहीं हैं। अक्षरों के बीच जगह छोड़ें और # जैसा वे सामान्य रूप से करते हैं, वैसा ही व्यवहार करें। उदाहरण के लिए, IsMatch( "a#b c", "(?x)a[ #]b[ #]c" ) रिटर्न सत्य. कुछ नियमित अभिव्यक्ति भाषाएं मुक्त स्पेस में वर्ण वर्गों को शामिल करती हैं, या उन्हें शामिल करने का विकल्प प्रदान करती हैं, लेकिन ऐसा नहीं करती हैं। Power Fx

उदाहरण के लिए, यहाँ ISO 8601 दिनांक समय से मिलान करने के लिए एक जटिल नियमित अभिव्यक्ति दी गई है:

IsMatch( 
    "2025-01-17T19:38:49+0000",
    "^\d{4}-(0\d|1[012])-([012]\d|3[01])(T([01]\d|2[0123]):[0-5]\d(:[0-5]\d(\.\d{3})?)?(Z|[\-+]\d{4}))?$"
)
// returns true

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

IsMatch( "2025-01-17T19:38:49+0000", 
    "(?x)                 # enables free spacing, must be very first
    ^                     # matches from beginning of text
    \d{4}                 # year (0000-9999)
    -(0\d|1[012])         # month (00-12)
    -([012]\d|3[01])      # day (00-31, range not checked against month)
    (T([01]\d|2[0123])    # optional time, starting with hours (00-23)
      :[0-5]\d            # minutes (00-59)
      (:[0-5]\d           # optional seconds (00-59)
        (\.\d{3})?        # optional milliseconds (000-999)
      )?
      (Z|[\-+]\d{4})      # time zone
    )?
    $                     # matches to end of text
    "
)
// returns true

IgnoreCase

नियमित अभिव्यक्ति के प्रारंभ में MatchOptions.IgnoreCase या (?i) के साथ सक्षम किया गया.

किसी अक्षर में पाठ का मिलान केस-असंवेदनशील होता है: बड़े अक्षर छोटे अक्षरों से मेल खाते हैं, तथा छोटे अक्षर बड़े अक्षरों से मेल खाते हैं।

उदाहरण के लिए:

IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true

IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true

अधिकांश भाग या तो संस्कृति के प्रति जागरूक हैं, लेकिन यहां ऐसा नहीं है। Power Fx संस्कृति अपरिवर्तनीय मिलान का उपयोग नियमित अभिव्यक्तियों के लिए उद्योग मानक है, जिसमें जावास्क्रिप्ट और पर्ल भी शामिल हैं। यह दूसरे उदाहरण में उपयोगी है जहां एक सिस्टम संसाधन का मिलान किया जा रहा है, उदाहरण के लिए, tr-TR संस्कृति में जहां Ii के बराबर अपरकेस नहीं है।

यदि संस्कृति जागरूक, केस असंवेदनशील मिलान की आवश्यकता है, तो इसके बजाय मिलान करने वाले वर्णों के साथ वर्ण वर्ग का उपयोग करें, उदाहरण के लिए पहले उदाहरण के लिए [Hh][Ee][Ll][Ll][Oo]

मल्टीलाइन

नियमित अभिव्यक्ति के प्रारंभ में MatchOptions.Multiline या (?m) के साथ सक्षम किया गया.

सामान्यतः, ^ और $ एंकर इनपुट टेक्स्ट के आरंभ और से मेल खाते हैं। मल्टीलाइन संशोधक के साथ, ये एंकर इनपुट टेक्स्ट में पंक्तियों के आरंभ और अंत से मेल खाते हैं, जहां प्रत्येक पंक्ति \r, \n, \r\n, या इनपुट के अंत के साथ समाप्त होती है। उदाहरण के लिए:

MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns 
// "Hello"

पूर्वनिर्धारित पैटर्न

पूर्वनिर्धारित पैटर्न आपको वर्णों के एक समूह या एकाधिक वर्णों के अनुक्रम में से किसी एक का मिलान करने देते हैं। अपने टेक्स्ट स्ट्रिंग को Match enum के सदस्यों के साथ संयोजित करने के लिए स्ट्रिंग-संघनन ऑपरेटर & का उपयोग करें:

Match इनम विवरण नियमित व्यंजक
कोई किसी भी वर्ण से मैच करता है. .
अल्पविराम अल्पविराम से मेल खाता है ,. ,
अंक एकल अंक (0 से लेकर 9 और \p{Nd} के अन्य सदस्यों) से मेल खाता है. \d
ईमेल एक ईमेल पते से मेल खाता है जिसमें एक "at" प्रतीक (@) और एक डोमेन नाम जिसमें कम से कम एक बिंदु (.) शामिल है, जो रिक्त स्थान और विराम चिह्नों द्वारा सीमांकित है। नोट देखें
हैफ़ेन हायफ़न से मैच करता है. - नोट देखें
बायाँपैरेन बाएँ कोष्ठक ( से मेल खाता है. \(
पत्र अक्षर से मैच करता है. \p{L}
मल्टीपलडिजिट्स एक या अधिक अंकों से मैच करता है. \d+
एकाधिक पत्र एक या अधिक अक्षरों से मैच करता है. \p{L}+
मल्टीपल नॉनस्पेस ऐसे एक या अधिक वर्णों से मैच करता है, जो श्वेत-रिक्ति (रिक्ति, टैब या नई पंक्ति नहीं) नहीं जोड़ते. \S+
मल्टीपलस्पेस ऐसे एक या अधिक वर्णों से मैच करता है, जो श्वेत-रिक्ति (रिक्ति, टैब या नई पंक्ति) जोड़ते हैं. \s+
नॉनस्पेस ऐसे एकल वर्ण से मैच करता है, जो श्वेत-रिक्ति नहीं जोड़ता. \S
वैकल्पिक अंक शून्य, एक या अधिक अंकों से मैच करता है. \d*
वैकल्पिकपत्र शून्य, एक या अधिक अक्षरों से मैच करता है. \p{L}*
वैकल्पिकगैरस्पेस ऐसे शून्य, एक या अधिक वर्णों से मैच करता है, जो श्वेत-रिक्ति नहीं जोड़ते. \S*
वैकल्पिक स्थान ऐसे शून्य, एक या अधिक वर्णों से मैच करता है, जो श्वेत-रिक्ति जोड़ते हैं. \s*
अवधि किसी अवधि या बिंदु से मेल खाता है .."). \.
राइटपैरेन दाएँ कोष्ठक ) से मेल खाता है. \)
अंतरिक्ष ऐसे वर्ण से मैच करता है, जो श्वेत-रिक्ति जोड़ता है. \s
टैब एक टैब वर्ण से मेल खाता है. \t

उदाहरण के लिए, पैटर्न "A" और Match.MultipleDigits अक्षर "A" से मेल खाता है जिसके बाद एक या अधिक अंक आते हैं।

Match.Email पैटर्न बाकी की तुलना में अधिक जटिल है। यह संभवतः लंबे पाठ अंशों से local@hostname.tld के रूप में सामान्य ईमेल पतों का पता लगाता है और उन्हें निकालता है, तथा अंतर्राष्ट्रीय वर्णों और इमोजी का समर्थन करता है। इसका उपयोग किसी ऐसे फॉर्म को सत्यापित करने के लिए करें जो ईमेल पते को इनपुट के रूप में लेता है, ताकि यह त्वरित परीक्षण किया जा सके कि इनपुट ईमेल फॉर्म में है या नहीं। यदि आप निष्कर्षण नहीं कर रहे हैं, तो ईमेल पता का पता लगाने के लिए MatchOptions.Complete का उपयोग करें, उदाहरण के लिए, पाठ इनपुट नियंत्रण में।

हालाँकि, Match.Email यह सत्यापित नहीं करता है कि ईमेल पता ईमेल पतों, डोमेन नामों और शीर्ष-स्तरीय डोमेन के लिए विकसित हो रहे सभी मानकों के अनुरूप है, जिसके लिए एक जटिल नियमित अभिव्यक्ति की आवश्यकता होगी जिसे समय-समय पर अद्यतन करने की आवश्यकता होगी। यद्यपि अधिकांश ईमेल पतों को अपेक्षा के अनुरूप माना जाता है, Match.Email कुछ अमान्य मामलों से मेल खाता है, जैसे होस्टनाम में अंडरस्कोर, और कुछ मान्य मामलों से मेल नहीं खाता है, जैसे उद्धृत ईमेल पते या आईपी पते। यदि आवश्यक हो, तो वास्तविक वैध ईमेल पते का पता लगाने के लिए वेब पर कई नियमित अभिव्यक्तियाँ उपलब्ध हैं। उत्पादन में उपयोग करने से पहले हमेशा अपनी विशिष्ट आवश्यकताओं के लिए अपने नियमित अभिव्यक्ति का परीक्षण करें।

यदि आप प्रयुक्त नियमित अभिव्यक्ति देखना चाहते हैं, तो सूत्र Text( Match.Email ) का मूल्यांकन करें। पहला भाग @ से पहले के वर्णों से मेल खाता है और RFC 822 और संशोधनों के अनुसार सामान्य ASCII विराम चिह्नों को छोड़ देता है और आसान निष्कर्षण के लिए यूनिकोड के आरंभ और अंत के विराम चिह्नों को छोड़ देता है, जैसे (, [, , «, और . यह उद्धृत स्ट्रिंग्स या टिप्पणियों के असामान्य और हतोत्साहित उपयोग का समर्थन नहीं करता है। @के बाद, नियमित अभिव्यक्ति का दूसरा और तीसरा भाग समान होता है और a . द्वारा अलग किया जाता है, जिससे यह सुनिश्चित होता है कि पते में हमेशा कम से कम एक . अवश्य होता है। इन भागों में ., -, और _ को छोड़कर सभी यूनिकोड विराम चिह्न शामिल नहीं हैं। IP पते समर्थित नहीं हैं. संपूर्ण ईमेल पते में अंतर्राष्ट्रीय वर्ण और इमोजी समर्थित हैं।

Power Appsमें, Power Fx 1.0 का उपयोग नहीं करते समय, Match.Email और Match.Hyphen की परिभाषाएँ थोड़ी भिन्न होती हैं। Match.Email सरल है, लेकिन ईमेल पता निकालने के लिए उपयुक्त नहीं है क्योंकि यह रिक्त स्थान को कैप्चर करता है। इससे पहले, Match.Hyphen को एक वर्ण वर्ग के बाहर एस्केप किया गया था जो अब अवैध है।

क्रमांकितउप-मैच

MatchOptions.NumberedSubMatches के साथ सक्षम, बिना किसी इनलाइन विकल्प के। (?n) संगतता के लिए इस विकल्प के विपरीत के रूप में समर्थित है और डिफ़ॉल्ट है।

डिफ़ॉल्ट रूप से, (...) कैप्चर नहीं करता है, जो कि अधिकांश सिस्टम "स्पष्ट कैप्चर" कहते हैं। कैप्चर करने के लिए, (?<name>...) बैकरेफरेंस \k<name> के साथ नामित कैप्चर का उपयोग करें। नामित कैप्चर का उपयोग करने से प्रदर्शन में सुधार होता है, क्योंकि इससे अनावश्यक समूहों को कैप्चर नहीं किया जाता, नामों का उपयोग करके स्पष्टता में सुधार होता है, तथा कैप्चर की स्थिति में परिवर्तन होने पर त्रुटियों की संभावना नहीं होती।

यदि आपके पास एक मौजूदा नियमित अभिव्यक्ति है, तो यह स्वचालित रूप से कैप्चर किए जाने वाले समूहों और क्रमांकित बैक संदर्भों सहित क्रमांकित होने पर निर्भर हो सकता है। यह व्यवहार MatchOptions.NumberedSubMatches विकल्प का उपयोग करके उपलब्ध है.

नामित और क्रमांकित उप-मिलानों का एक साथ उपयोग नहीं किया जा सकता। क्योंकि कुछ कार्यान्वयन क्रमांकित और नामित कैप्चर समूहों के मिश्रण को अलग-अलग तरीके से व्यवहार करते हैं, Power Fx इसे अनुमति नहीं देता है।

संभवतः खाली उप-मिलान

जैसा कि परिचय में कहा गया है, Power Fx की नियमित अभिव्यक्तियाँ जानबूझकर उन सुविधाओं तक सीमित हैं जिन्हें .NET, जावास्क्रिप्ट और अन्य प्रोग्रामिंग भाषा नियमित अभिव्यक्ति इंजनों पर लगातार लागू किया जा सकता है। लेखन-समय संबंधी त्रुटियाँ उन सुविधाओं का उपयोग करने से रोकती हैं जो इस सेट का हिस्सा नहीं हैं।

एक क्षेत्र जो कार्यान्वयन के बीच भिन्न हो सकता है वह है कि खाली उप-मिलानों को कैसे प्रबंधित किया जाता है। उदाहरण के लिए, नियमित अभिव्यक्ति (?<submatch>a*)+ पर विचार करें जिसे पाठ a से मिलान करने के लिए कहा गया है। .NET पर, सबमैच का परिणाम रिक्त टेक्स्ट स्ट्रिंग होता है, जबकि जावास्क्रिप्ट पर इसका परिणाम a होता है। दोनों को सही कार्यान्वयन के रूप में तर्क दिया जा सकता है, क्योंकि + क्वांटिफायर को एक खाली स्ट्रिंग से संतुष्ट किया जा सकता है क्योंकि समूह की सामग्री में * क्वांटिफायर होता है।

कार्यान्वयनों में भिन्न परिणामों से बचने के लिए, जो उप-मिलान रिक्त हो सकते हैं, उनका उपयोग क्वांटिफायर के साथ नहीं किया जा सकता। Power Fx यहां कुछ उदाहरण दिए गए हैं कि कैसे एक उप-मिलान रिक्त हो सकता है:

उदाहरण विवरण
(?<submatch>a{0,}b*)+ उप-मिलान की समस्त सामग्री वैकल्पिक है, इसलिए संपूर्ण उप-मिलान रिक्त हो सकता है।
((<submatch>a)?b)+ उप-मिलान के बाहर होने के कारण, समग्र रूप से उप-मिलान वैकल्पिक है। ?
(?<submatch>a|b*)+ उप-मैच के भीतर किसी ऐसी चीज को प्रतिस्थापित करने से जो रिक्त हो सकती है, संपूर्ण उप-मैच रिक्त हो सकता है।
((?<submatch>a)|b)+ उप-मिलान के बाहर प्रत्यावर्तन मेल खा सकता है b जिस स्थिति में उप-मिलान रिक्त होगा।

(?<submatch>a+)+ में उप-मिलान रिक्त नहीं हो सकता क्योंकि उप-मिलान में कम से कम एक a होना चाहिए, और यह समर्थित है।

यूनिकोड

Power Fx नियमित अभिव्यक्तियाँ \w, \d, और \s को परिभाषित करने के लिए यूनिकोड श्रेणियों का उपयोग करती हैं, जिनमें विशिष्ट श्रेणियाँ \p{..} के माध्यम से उपलब्ध होती हैं।

ये परिभाषाएँ विभिन्न प्लेटफार्मों पर भिन्न हो सकती हैं। उदाहरण के लिए, यूनिकोड मानक को समय-समय पर नए वर्णों के साथ अद्यतन किया जाता है, जिसे बाद में प्लेटफार्मों द्वारा अपनी गति से क्रियान्वित किया जाएगा। जब तक सभी प्लेटफ़ॉर्म अपडेट नहीं हो जाते, तब तक विभिन्न प्लेटफ़ॉर्म के परिणामों में भिन्नता की अपेक्षा करें।

Power Fx नियमित अभिव्यक्तियाँ यह सुनिश्चित करती हैं कि मूल बहुभाषी तल (अक्षर U+0 से U+ffff) के लिए श्रेणी जानकारी हमेशा उपलब्ध रहे। कुछ प्लेटफ़ॉर्म पूरक बहुभाषी प्लेन और उससे आगे (U+10000 से U+10ffff तक) वर्णों के लिए श्रेणियां लागू नहीं करते हैं। यह सीमा आमतौर पर चिंता का विषय नहीं है क्योंकि बेसिक बहुभाषीय प्लेन में अक्षर सबसे अधिक उपयोग किए जाते हैं। यदि आपके परिदृश्य में U+10000 या उससे अधिक के वर्ण शामिल हैं, तो श्रेणियों के बजाय सीधे वर्ण मानों का उपयोग करें। अपने नियमित अभिव्यक्तियों का परीक्षण उन प्लेटफार्मों पर करें जिनका आप उपयोग करना चाहते हैं।

विभिन्न प्लेटफार्मों के बीच छोटे-मोटे अंतर हो सकते हैं। उदाहरण के लिए, कुछ प्लेटफ़ॉर्म ſ को मिलान के रूप में नहीं देख सकते हैं s जब MatchOptions.IgnoreCase को लागू किया जाता है। यदि ये वर्ण आपके परिदृश्य के लिए महत्वपूर्ण हैं, तो केस-असंवेदनशील रूप से मिलान करने और इच्छित वर्णों को स्पष्ट रूप से शामिल करने के लिए [ſsS] जैसे वर्ण वर्ग का उपयोग करें।