एक नियमित अभिव्यक्ति क्या है? एक नियमित अभिव्यक्ति कुछ विशिष्ट वर्णों का उपयोग करती है, जो पहले से परिभाषित हैं, और इन विशेष वर्णों के संयोजन के साथ, एक क्रीम नियम स्ट्रिंग क्रीम बनाते हैं, जो स्ट्रिंग के लिए एक प्रकार का फ़िल्टर तर्क व्यक्त करने के लिए उपयोग किया जाता है।
नियमित अभिव्यक्ति के माध्यम से निम्नलिखित उद्देश्यों को प्राप्त किया जा सकता हैः
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
可以通过正则表达式,从字符串中获取我们想要的特定部分。
मैक के लिए बहुत सारे अच्छे सॉफ्टवेयर की सिफारिश की गई है। मैं आपको अपने लेख के बारे में बताता हूं।
एक नियमित अभिव्यक्ति में केवल सामान्य पाठ हो सकता है, जो कि उस पाठ को सटीक रूप से मेल खाने के लिए प्रतिनिधित्व करता है; उदाहरण के लिएः
एक सामान्य अभिव्यक्ति हैःsong
अनुस्मारक के लिए प्रतीक्षाः xiao songge, xiao songge
मैच के बाद परिणामः xiaosong
Ge, Xiao Songge
नियमित अभिव्यक्ति डिफ़ॉल्ट रूप से बड़े आकार में लिखी जाती है, इसलिए गीत मेल नहीं खाता है Song Song. लेकिन अधिकांश नियमित अभिव्यक्ति कार्यान्वयन एक विकल्प प्रदान करते हैं जो बड़े आकार में नहीं लिखा जाता है।
. का उपयोग किसी भी वर्ण से मेल खाने के लिए किया जाता है, जैसेः
नियमित अभिव्यक्ति: c.t
मैचिंग के लिए प्रतीक्षा करें
मैच के बाद परिणामःcat
cet
कैट डॉग
विश्लेषणः c.t को "c
同理,多个连续的.可以匹配多个连续的任意字符:
एक औपचारिक अभिव्यक्ति: c...t
मैचिंग के लिए प्रतीक्षा करें
मिलान के बाद परिणामः cat cetcaat
कुत्ता
. एक विशेष वर्ण है जिसका एक विशेष अर्थ है, और यह विशेष वर्णों के लिए एक विशेष अर्थ रखता है।. एक विशेष वर्ण है जो विशेष वर्णों के लिए एक विशेष अर्थ रखता है। यदि आप एक वास्तविक ".........................................................................................................................
नियमित अभिव्यक्ति: c.t
मिलान के लिए प्रतीक्षा पाठः cat c.t dog
मिलान के बाद परिणामः catc.t
कुत्ता
ध्यान देंः चूंकि \ भी एक विशेष वर्ण है, इसलिए एक वास्तविक "\" वर्ण से मेल खाने के लिए दो उलटा हिलाव का उपयोग करना आवश्यक हैः
नियमित अभिव्यक्ति: c\t
मिलान के लिए प्रतीक्षा पाठः cat c\t dog
मिलान के बाद परिणामः catc\t
कुत्ता
जैसा कि ऊपर बताया गया है, आप किसी भी वर्ण से मेल खा सकते हैं, लेकिन अगर मैं कुछ विशिष्ट वर्णों से मेल खाना चाहता हूं तो क्या होगा?
औपचारिक अभिव्यक्तिः c[ab]t
मैचिंग के लिए प्रतीक्षा कर रहा है
मैच के बाद परिणामःcat
cbt
cet
विश्लेषणः [ab] "a
उपरोक्त उदाहरण में, क्या होगा अगर मैं [a-z] में एक और जोड़ना चाहता हूं? क्या मैं [a-z] में दर्जनों लिखूंगा यदि मैं [a-z] में किसी भी छोटे अक्षरों को जोड़ना चाहता हूं? यह संभव है, लेकिन यह बहुत लंबा है.
औपचारिक अभिव्यक्तिः c[a-z]t
मेल खाने के लिए पाठः cat cbt czt c2t
मैच के बाद परिणामःcat
cbt
czt
c2t
विश्लेषणः c[a-z]t "c" से शुरू होता है, t से समाप्त होता है, और बीच में अक्षर "a" - "z" के लिए किसी भी अक्षर को दर्शाता है।
इस तरह के अन्य स्थान हैंः
[0-9] के समान कार्य करता है जैसे कि [0123456789]. सभी संख्याओं से मेल खाता है. [A-F] A से F तक के बड़े अक्षरों के साथ मेल खाता है. [A-Z] सभी A से Z तक के बड़े अक्षरों से मेल खाता है. [a-z] सभी a से z तक के छोटे अक्षरों से मेल खाता है. [A-z] ASCII A से ASCII z तक के सभी वर्णों का मिलान करता है ((न केवल सभी अक्षरों का मिलान करता है, बल्कि ASCII तालिका में A से z तक के वर्णों का भी मिलान करता है, जैसे [ और ^ आदि) ।) [A-Za-z0-9] सभी बड़े अक्षरों और संख्याओं से मेल खाता है.
वर्ण सेट आमतौर पर उन वर्णों के समूह को निर्दिष्ट करने के लिए उपयोग किया जाता है जिन्हें मिलान करने की आवश्यकता होती है। लेकिन कभी-कभी, आप उन वर्णों के समूह को बाहर करना चाहते हैं जिन्हें आप मिलान नहीं करना चाहते हैं। यह वर्ण सेट के लिए अस्वीकृति द्वारा किया जा सकता है। उदाहरण के लिएः
औपचारिक अभिव्यक्ति: c[^a-z]t
मिलान के लिए प्रतीक्षा पाठः cat cbt czt c2t cAt
मिलान के बाद परिणामः cat cbt cztc2t
cAt
विश्लेषणः यह पिछले उदाहरण के विपरीत है。[a-z] सभी छोटे अक्षरों से मेल खाता है, जबकि [^a-z] सभी गैर-छोटे अक्षरों से मेल खाता है。
ध्यान दें कि ^ वर्णों के सेट में सभी वर्णों के साथ मेल नहीं खाता है.
मूल वर्णों का नियमित अभिव्यक्ति में विशेष अर्थ होता है, जैसा कि हमने पहले ही कहा है, जैसे कि... [और]...................................................................................................................................................................................................................................
सभी मेटाकार्टर्स के आगे एक उलटा-लकीर-परिवर्तन हो सकता है, जब परिवर्तन किया जाता है, तो चरित्र अपने आप को मेल खाएगा, न कि अपने विशेष अर्थों को; उदाहरण के लिए, "[" [:]: के साथ मेल खाएगा।
औपचारिक अभिव्यक्ति: a[b]
मेल खाने के लिए पाठः a[b ab a[[b]
मैच के बाद परिणामःa[b
ab a[[b
ध्यान देंः यदि आप एक वास्तविक "\" से मिलान करना चाहते हैं, तो आप \ का उपयोग कर सकते हैंः
नियमित अभिव्यक्ति: a\b
मेल खाने के लिए पाठः a\b a\b a[[b
मिलान के बाद परिणाम: a\ba\b
a[[b
कभी-कभी आपको उन रिक्त वर्णों से मिलान करने की आवश्यकता हो सकती है जिन्हें आप पाठ में प्रिंट नहीं कर सकते हैं. उदाहरण के लिए, आप सभी टैब वर्णों या सभी प्रतिस्थापन वर्णों को खोजने में सक्षम होना चाहते हैं. आप नीचे दी गई तालिका में विशेष मेटा वर्णों का उपयोग कर सकते हैंः
उदाहरण के लिए, \r\n एक बैकलिंक स्विच संयोजन से मेल खाता है, जो विंडोज में एक फ़ाइल स्विच को दर्शाता है। लिनक्स और यूनिक्स सिस्टम में, केवल \n का उपयोग करना आवश्यक है।
कुछ विशेष मेटाकार्टर्स हैं जिनका उपयोग सामान्य रूप से उपयोग किए जाने वाले वर्णों के सेट से मेल खाने के लिए किया जा सकता है। इन मेटाकार्टर्स को मेटाकार्टर्स क्लास कहा जाता है। आपको उनका उपयोग करना आसान लगेगा।
अंक या गैर अंक मिलान उपरोक्त के अनुसार,[0-9] सभी संख्याओं से मेल खा सकता है. यदि आप किसी भी संख्या से मेल नहीं खाना चाहते हैं, तो आप [^0-9] का उपयोग कर सकते हैं. नीचे दी गई तालिका में संख्यात्मक और गैर-संख्यात्मक वर्ग तत्व वर्ण सूचीबद्ध हैंः
नियमित अभिव्यक्ति: c\dt
मेल खाने के लिए पाठः cat c2t czt c9t
मिलान के बाद परिणामः catc2t
cztc9t
नियमित अभिव्यक्ति: c\Dt
मेल खाने के लिए पाठः cat c2t czt c9t
मैच के बाद परिणामःcat
c2tczt
c9t
अक्षरों और गैर-अक्षरों से मेल खाता है
एक और सामान्य रूप से उपयोग किया जाने वाला वर्ग मेटाकार्ट है \w और \W:
नियमित अभिव्यक्ति: c\wt
मेल खाने के लिए पाठः cat c2t czt c-t c\t
मैच के बाद परिणामःcat
c2t
c-t c\ t
नियमित अभिव्यक्ति: c\Wt
मिलान के लिए प्रतीक्षा पाठः cat c2t c-t c\t
मिलान के बाद परिणामः cat c2tc-t
c\t
रिक्त स्थान और गैर रिक्त स्थान मिलान
अंतिम मैचिंग क्लास जो आपको मिलने वाली है, वह है खाली वर्गः
नियमित अभिव्यक्ति: c\st
मिलान के लिए पाठः cat c t c2t c\t
मिलान के बाद परिणामः catc t
c2t c\t
नियमित अभिव्यक्ति: c\St
मिलान के लिए पाठः cat c t c2t c\t
मैच के बाद परिणामःcat
c tc2t
c\t
+ मेटा वर्ण एक या अधिक वर्णों के मिलान को दर्शाता है। उदाहरण के लिए, a "a" से मेल खाएगा, जबकि a + एक या अधिक "a" से मेल खाएगा।
सामान्य अभिव्यक्तिः cat
मेल खाने के लिए पाठः ct cat caat caaat
मिलान के बाद परिणामः ctcat
कैट कैट
औपचारिक अभिव्यक्ति: ca+t
मेल खाने के लिए पाठः ct cat caat caaat
मिलान के बाद परिणामः ctcat
caat
caaat
जब + का उपयोग वर्णों के सेट में किया जाता है, तो + प्रतीक को सेट के बाहर रखना आवश्यक होता हैः
औपचारिक अभिव्यक्ति: c[0-9] + t
मेल खाने के लिए पाठःct c0t cat c123t
मिलान के बाद परिणामः ctc0t
बिल्लीc123t
विश्लेषणः c[0-9]+t एक स्ट्रिंग है जो एक या एक से अधिक अंकों के बीच में "c" से शुरू होती है और "t" से समाप्त होती है।
बेशक, [0-9+] भी एक वैध नियमित अभिव्यक्ति है, लेकिन यह 0 - 9 और + प्रतीकों वाले वर्णों के एक सेट को दर्शाता है।
सामान्य तौर पर, मेटाकार्टर्स जैसे कि. और + का उपयोग अक्षरों के सेट के लिए किया जाता है, इसलिए इसका अनुवाद करने की आवश्यकता नहीं होती है। लेकिन इसका अनुवाद करना ठीक है, इसलिए, [0-9+] और [0-9+] का कार्य समान है।
ध्यान देंः + एक मेटाकार्ड है, "+" से मेल खाने के लिए +// का उपयोग करना आवश्यक है।
यदि आप शून्य या अधिक वर्णों से मेल खाना चाहते हैं, तो आप * मेटा वर्णों का उपयोग कर सकते हैं।
औपचारिक अभिव्यक्ति: ca*t
मेल खाने के लिए पाठःct cat caat cbt
मैच के बाद परिणामःct
cat
caat
cbt
ध्यान दें:* प्रतीक मेटा वर्ण हैं. * * को जोड़ने के लिए, * * को बदलना आवश्यक है।
? शून्य या एक वर्ण से मेल खाता है. इसलिए,? पाठ में एक वैकल्पिक वर्ण से मेल खाने के लिए बहुत उपयुक्त है.
औपचारिक अभिव्यक्ति: ca?t
मेल खाने के लिए पाठःct cat caat cbt
मैच के बाद परिणामःct
cat
कैट सीबीटी
ध्यान देंः? प्रतीक मेटा वर्ण हैं. "? " से मेल खाने के लिए, एक रूपांतरण की आवश्यकता है?.
एक औपचारिक अभिव्यक्ति एक मिलान की संख्या को निर्दिष्ट करने की अनुमति देती है। एक मिलान की संख्या एक मिलान के बीच निर्दिष्ट की जा सकती है। ध्यान देंः {और} भी मेटाकार्ड हैं, और शाब्दिक अर्थों का उपयोग करते समय अनुवाद की आवश्यकता होती है।
सटीक संख्या में मेल आप मेल खाने की संख्या निर्दिष्ट करने के लिए {और} के बीच एक संख्या दर्ज कर सकते हैं। उदाहरण के लिए, {3} 3 बार पहले दिखाई देने वाले वर्णों या समूहों से मेल खाएगाः
औपचारिक अभिव्यक्ति: ca{3}t
मेल खाने के लिए पाठःct cat caaat cbt
मिलान के बाद परिणामः ct catcaaat
cbt
कम से कम एक बार मिलान
हम केवल न्यूनतम मानों को भी निर्दिष्ट कर सकते हैं जिनसे मैच होता है. उदाहरण के लिए, {2,} का अर्थ है 2 या अधिक मैचः
औपचारिक अभिव्यक्ति: ca{1,} t
मेल खाने के लिए पाठःct cat caaat cbt
मिलान के बाद परिणामः ctcat
caaat
cbt
गुणनखंड में मिलान
हम न्यूनतम और अधिकतम मानों का भी उपयोग कर सकते हैं जो मिलानों की संख्या को निर्धारित करते हैं। उदाहरण के लिए, {2,3} का अर्थ है न्यूनतम 2 मिलान और अधिकतम 3 मिलान।
औपचारिक अभिव्यक्ति: ca{2,3} t
मेल खाने के लिए पाठःct cat caaat cbt
मिलान के बाद परिणामः ct catcaaat
cbt
तो? और {0,1} का कार्य एक ही है, + और {1,} का कार्य एक ही है.
एक उदाहरण देखेंः
नियमित अभिव्यक्ति: s.*g मिलान के लिए प्रतीक्षा कर रहे हैं मैच के बाद परिणामः xiao song xiao song विश्लेषणः s.*g ने दो "songs" को नहीं जोड़ा, जैसा कि अपेक्षित था, लेकिन पहले "s" और अंतिम "g" के बीच सभी पाठों को जोड़ा।
इसका कारण यह है कि * और + दोनों ही लालची मिलान हैं. यही है, नियमित अभिव्यक्ति हमेशा सबसे बड़ी मिलान की तलाश करती है, न कि सबसे छोटी, जो कि जानबूझकर डिज़ाइन की गई है.
लेकिन अगर आप नहीं चाहते हैं कि एक greedy मिलान हो, तो आप इन माप शब्दों के गैर-greedy मिलान का उपयोग कर सकते हैं (जितना संभव हो उतना कम वर्णों का मिलान) । गैर-greedy मात्रा शब्द माप के बाद जोड़ा जाता हैः
हाँ?यह एक गैर-लालचपूर्ण संस्करण है, इसलिए ऊपर दिए गए उदाहरण को संशोधित करने के लिए *? का उपयोग करेंः
正则表达式:s.? जी
मिलान के लिए प्रतीक्षा कर रहे हैं
मिलान के बाद परिणामः xiaosong
सियाओsong
分析:可以看到s.? g दो "songs" से मेल खाता है.
स्ट्रिंग की सीमाओं के साथ मेल खाने वाले मेटाकार्ड ^ और $ हैं, जो क्रमशः स्ट्रिंग के प्रारंभ और अंत के लिए उपयोग किए जाते हैं।
^ इस प्रकार प्रयोग किया जाता हैः
औपचारिक अभिव्यक्ति: ^ xiao
मिलान के लिए प्रतीक्षा करें
मैच के बाद परिणामःxiao
गीत
मेल के लिए प्रतीक्षा करें मिलान के बाद परिणामः axiaosong विश्लेषणः ^ xiao "xiao" से शुरू होने वाले स्ट्रिंग से मेल खाता है.
$ का उपयोग इस प्रकार किया जाता हैः
औपचारिक अभिव्यक्ति: song$
मिलान के लिए प्रतीक्षा करें
मिलान के बाद परिणामः xiaosong
अनुस्मारक के लिए प्रतीक्षा करें मिलान के बाद परिणामः Xiaosonga विश्लेषणः song$ "song" के साथ समाप्त होने वाले स्ट्रिंग से मेल खाता है।
साझा करेंः
औपचारिक अभिव्यक्ति: ^ [0-9a-zA-Z] {4,} $
मेल खाने के लिए पाठः a1b234ABC
मैच के बाद परिणामःa1b234ABC
मिलान के लिए पाठः + a1b23 = 4ABC मिलान के बाद परिणामः + a1b23 = 4ABC विश्लेषणः ^[0-9a-zA-Z]{4,} $ एक संख्या या अक्षर के साथ मेल खाता है, और चार अंकों के बराबर स्ट्रिंग से अधिक अंक है।
ध्यान देंः यदि सेट के प्रारंभ में ^ है, तो यह नकारात्मक है; यदि सेट के बाहर है, तो यह स्ट्रिंग के प्रारंभ स्थान से मेल खाता है. आप [^0-9] और ^[0-9] के बीच अंतर का परीक्षण कर सकते हैं.
हालाँकि, बहु-पंक्ति मोड को सक्षम किया जा सकता है। बहु-पंक्ति मोड में, नियमित अभिव्यक्ति इंजन स्ट्रिंग के विभाजक के रूप में प्रतिस्थापन पंक्ति का उपयोग करता है, ^ पाठ के प्रारंभ या एक पंक्ति के प्रारंभ से मेल खाता है, और $ पाठ के अंत या एक पंक्ति के अंत से मेल खाता है।
पिछले उदाहरण को संशोधित करेंः
औपचारिक अभिव्यक्तिः ((? m) ^ [0-9a-zA-Z] {4,} $
मेल खाने के लिए पाठः a1b234ABC + a1b23 = 4ABC ABC123456
मैच के बाद परिणामःa1b234ABC
+a1b23=4ABCABC123456
विश्लेषणः ((?m) ^ [0-9a-zA-Z]{4,} $ प्रत्येक पंक्ति में संख्याओं या अक्षरों के साथ मेल खाता है, और चार अंकों के बराबर स्ट्रिंग से अधिक अंक हैं।
ध्यान देंः यदि बहु-पंक्ति मोड का उपयोग किया जाता है, तो ((?m) को नियमित अभिव्यक्ति के प्रारंभ में रखा जाना चाहिए। (?m) अधिकांश नियमित अभिव्यक्ति कार्यान्वयनों में समर्थित नहीं है. कुछ नियमित अभिव्यक्ति कार्यान्वयनों में \\A मिलान स्ट्रिंग के प्रारंभ और \\Z मिलान स्ट्रिंग के अंत का उपयोग करना भी समर्थित है. यदि समर्थित है, तो ये मेटाकार्कों का कार्य ^, $ के समान है. लेकिन ये मेटाकार्कों में \\?m संशोधन का उपयोग नहीं किया जा सकता है और इसलिए बहु-पंक्ति मोड में उपयोग नहीं किया जा सकता है।
आईओएस_कोसोन्को की पुस्तिका से अनुप्रेषित