नियमित अभिव्यक्ति को व्यवस्थित रूप से सीखना (१): बुनियादी लेख

लेखक:छोटे सपने, बनाया गयाः 2017-03-29 10:52:47, अद्यतनः 2020-11-18 12:39:53

नियमित अभिव्यक्ति को व्यवस्थित रूप से सीखना (१): बुनियादी लेख

एक नियमित अभिव्यक्ति क्या है? एक नियमित अभिव्यक्ति कुछ विशिष्ट वर्णों का उपयोग करती है, जो पहले से परिभाषित हैं, और इन विशेष वर्णों के संयोजन के साथ, एक क्रीम नियम स्ट्रिंग क्रीम बनाते हैं, जो स्ट्रिंग के लिए एक प्रकार का फ़िल्टर तर्क व्यक्त करने के लिए उपयोग किया जाता है।

  • नियमित अभिव्यक्ति के माध्यम से निम्नलिखित उद्देश्यों को प्राप्त किया जा सकता हैः

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    मैक के लिए बहुत सारे अच्छे सॉफ्टवेयर की सिफारिश की गई है। मैं आपको अपने लेख के बारे में बताता हूं।

    img

यहाँ हम नियमित अभिव्यक्ति के विभिन्न नियमों के बारे में बात करते हैंः

  • सामान्य पाठ वर्णों से मेल खाता है

    एक नियमित अभिव्यक्ति में केवल सामान्य पाठ हो सकता है, जो कि उस पाठ को सटीक रूप से मेल खाने के लिए प्रतिनिधित्व करता है; उदाहरण के लिएः

    एक सामान्य अभिव्यक्ति हैःsongअनुस्मारक के लिए प्रतीक्षाः xiao songge, xiao songge मैच के बाद परिणामः xiaosongGe, Xiao Songge नियमित अभिव्यक्ति डिफ़ॉल्ट रूप से बड़े आकार में लिखी जाती है, इसलिए गीत मेल नहीं खाता है Song Song. लेकिन अधिकांश नियमित अभिव्यक्ति कार्यान्वयन एक विकल्प प्रदान करते हैं जो बड़े आकार में नहीं लिखा जाता है।

  • किसी भी वर्ण से मेल खाता है

    . का उपयोग किसी भी वर्ण से मेल खाने के लिए किया जाता है, जैसेः

    नियमित अभिव्यक्ति: c.t मैचिंग के लिए प्रतीक्षा करें मैच के बाद परिणामःcat cetकैट डॉग विश्लेषणः c.t को "c से शुरू होता है, t से समाप्त होता है" और बीच में किसी भी वर्ण के साथ एक स्ट्रिंग के साथ मेल खाता है।

    同理,多个连续的.可以匹配多个连续的任意字符:

    एक औपचारिक अभिव्यक्ति: c...t मैचिंग के लिए प्रतीक्षा करें मिलान के बाद परिणामः cat cetcaatकुत्ता

  • विशेष वर्णों से मेल खाता है

    . एक विशेष वर्ण है जिसका एक विशेष अर्थ है, और यह विशेष वर्णों के लिए एक विशेष अर्थ रखता है।. एक विशेष वर्ण है जो विशेष वर्णों के लिए एक विशेष अर्थ रखता है। यदि आप एक वास्तविक ".........................................................................................................................

    नियमित अभिव्यक्ति: c.t मिलान के लिए प्रतीक्षा पाठः cat c.t dog मिलान के बाद परिणामः catc.tकुत्ता ध्यान देंः चूंकि \ भी एक विशेष वर्ण है, इसलिए एक वास्तविक "\" वर्ण से मेल खाने के लिए दो उलटा हिलाव का उपयोग करना आवश्यक हैः

    नियमित अभिव्यक्ति: c\t मिलान के लिए प्रतीक्षा पाठः cat c\t dog मिलान के बाद परिणामः catc\tकुत्ता

  • वर्णों का उपयोग करें

    जैसा कि ऊपर बताया गया है, आप किसी भी वर्ण से मेल खा सकते हैं, लेकिन अगर मैं कुछ विशिष्ट वर्णों से मेल खाना चाहता हूं तो क्या होगा?

    औपचारिक अभिव्यक्तिः c[ab]t मैचिंग के लिए प्रतीक्षा कर रहा है मैच के बाद परिणामःcat cbtcet विश्लेषणः [ab] "a या b " से मेल खाता है; इसलिए c[ab]t cat और cbt से मेल खाता है, लेकिन cet से मेल नहीं खाता है।

  • वर्ण समूह के बीच का उपयोग करें

    उपरोक्त उदाहरण में, क्या होगा अगर मैं [a-z] में एक और जोड़ना चाहता हूं? क्या मैं [a-z] में दर्जनों लिखूंगा यदि मैं [a-z] में किसी भी छोटे अक्षरों को जोड़ना चाहता हूं? यह संभव है, लेकिन यह बहुत लंबा है.

    औपचारिक अभिव्यक्तिः c[a-z]t मेल खाने के लिए पाठः cat cbt czt c2t मैच के बाद परिणामःcat cbt cztc2t विश्लेषणः 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[bab a[[b ध्यान देंः यदि आप एक वास्तविक "\" से मिलान करना चाहते हैं, तो आप \ का उपयोग कर सकते हैंः

    नियमित अभिव्यक्ति: a\b मेल खाने के लिए पाठः a\b a\b a[[b मिलान के बाद परिणाम: a\ba\ba[[b

  • रिक्त वर्ण

    कभी-कभी आपको उन रिक्त वर्णों से मिलान करने की आवश्यकता हो सकती है जिन्हें आप पाठ में प्रिंट नहीं कर सकते हैं. उदाहरण के लिए, आप सभी टैब वर्णों या सभी प्रतिस्थापन वर्णों को खोजने में सक्षम होना चाहते हैं. आप नीचे दी गई तालिका में विशेष मेटा वर्णों का उपयोग कर सकते हैंः

    img

    उदाहरण के लिए, \r\n एक बैकलिंक स्विच संयोजन से मेल खाता है, जो विंडोज में एक फ़ाइल स्विच को दर्शाता है। लिनक्स और यूनिक्स सिस्टम में, केवल \n का उपयोग करना आवश्यक है।

  • विशिष्ट वर्ण प्रकारों से मेल खाता है

    कुछ विशेष मेटाकार्टर्स हैं जिनका उपयोग सामान्य रूप से उपयोग किए जाने वाले वर्णों के सेट से मेल खाने के लिए किया जा सकता है। इन मेटाकार्टर्स को मेटाकार्टर्स क्लास कहा जाता है। आपको उनका उपयोग करना आसान लगेगा।

    अंक या गैर अंक मिलान उपरोक्त के अनुसार,[0-9] सभी संख्याओं से मेल खा सकता है. यदि आप किसी भी संख्या से मेल नहीं खाना चाहते हैं, तो आप [^0-9] का उपयोग कर सकते हैं. नीचे दी गई तालिका में संख्यात्मक और गैर-संख्यात्मक वर्ग तत्व वर्ण सूचीबद्ध हैंः

    img

    नियमित अभिव्यक्ति: c\dt मेल खाने के लिए पाठः cat c2t czt c9t मिलान के बाद परिणामः catc2tcztc9t

    नियमित अभिव्यक्ति: c\Dt मेल खाने के लिए पाठः cat c2t czt c9t मैच के बाद परिणामःcatc2tcztc9t अक्षरों और गैर-अक्षरों से मेल खाता है एक और सामान्य रूप से उपयोग किया जाने वाला वर्ग मेटाकार्ट है \w और \W:

    img

    नियमित अभिव्यक्ति: c\wt मेल खाने के लिए पाठः cat c2t czt c-t c\t मैच के बाद परिणामःcat c2tc-t c\ t

    नियमित अभिव्यक्ति: c\Wt मिलान के लिए प्रतीक्षा पाठः cat c2t c-t c\t मिलान के बाद परिणामः cat c2tc-t c\tरिक्त स्थान और गैर रिक्त स्थान मिलान अंतिम मैचिंग क्लास जो आपको मिलने वाली है, वह है खाली वर्गः

    img

    नियमित अभिव्यक्ति: c\st मिलान के लिए पाठः cat c t c2t c\t मिलान के बाद परिणामः catc tc2t c\t

    नियमित अभिव्यक्ति: c\St मिलान के लिए पाठः cat c t c2t c\t मैच के बाद परिणामःcatc 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 caatcbt ध्यान दें:* प्रतीक मेटा वर्ण हैं. * * को जोड़ने के लिए, * * को बदलना आवश्यक है।

  • एक शून्य या एक वर्ण से मेल खाता है

    ? शून्य या एक वर्ण से मेल खाता है. इसलिए,? पाठ में एक वैकल्पिक वर्ण से मेल खाने के लिए बहुत उपयुक्त है.

    औपचारिक अभिव्यक्ति: ca?t मेल खाने के लिए पाठःct cat caat cbt मैच के बाद परिणामःct catकैट सीबीटी ध्यान देंः? प्रतीक मेटा वर्ण हैं. "? " से मेल खाने के लिए, एक रूपांतरण की आवश्यकता है?.

  • मिलान की संख्या का उपयोग करें

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

    सटीक संख्या में मेल आप मेल खाने की संख्या निर्दिष्ट करने के लिए {और} के बीच एक संख्या दर्ज कर सकते हैं। उदाहरण के लिए, {3} 3 बार पहले दिखाई देने वाले वर्णों या समूहों से मेल खाएगाः

    औपचारिक अभिव्यक्ति: ca{3}t मेल खाने के लिए पाठःct cat caaat cbt मिलान के बाद परिणामः ct catcaaatcbt कम से कम एक बार मिलान हम केवल न्यूनतम मानों को भी निर्दिष्ट कर सकते हैं जिनसे मैच होता है. उदाहरण के लिए, {2,} का अर्थ है 2 या अधिक मैचः

    औपचारिक अभिव्यक्ति: ca{1,} t मेल खाने के लिए पाठःct cat caaat cbt मिलान के बाद परिणामः ctcat caaatcbt गुणनखंड में मिलान हम न्यूनतम और अधिकतम मानों का भी उपयोग कर सकते हैं जो मिलानों की संख्या को निर्धारित करते हैं। उदाहरण के लिए, {2,3} का अर्थ है न्यूनतम 2 मिलान और अधिकतम 3 मिलान।

    औपचारिक अभिव्यक्ति: ca{2,3} t मेल खाने के लिए पाठःct cat caaat cbt मिलान के बाद परिणामः ct catcaaatcbt तो? और {0,1} का कार्य एक ही है, + और {1,} का कार्य एक ही है.

  • गैर-लालचपूर्ण मिलान

    एक उदाहरण देखेंः

    नियमित अभिव्यक्ति: s.*g मिलान के लिए प्रतीक्षा कर रहे हैं मैच के बाद परिणामः xiao song xiao song विश्लेषणः s.*g ने दो "songs" को नहीं जोड़ा, जैसा कि अपेक्षित था, लेकिन पहले "s" और अंतिम "g" के बीच सभी पाठों को जोड़ा।

    इसका कारण यह है कि * और + दोनों ही लालची मिलान हैं. यही है, नियमित अभिव्यक्ति हमेशा सबसे बड़ी मिलान की तलाश करती है, न कि सबसे छोटी, जो कि जानबूझकर डिज़ाइन की गई है.

    लेकिन अगर आप नहीं चाहते हैं कि एक greedy मिलान हो, तो आप इन माप शब्दों के गैर-greedy मिलान का उपयोग कर सकते हैं (जितना संभव हो उतना कम वर्णों का मिलान) । गैर-greedy मात्रा शब्द माप के बाद जोड़ा जाता हैः

    img

    हाँ?यह एक गैर-लालचपूर्ण संस्करण है, इसलिए ऊपर दिए गए उदाहरण को संशोधित करने के लिए *? का उपयोग करेंः

    正则表达式: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 संशोधन का उपयोग नहीं किया जा सकता है और इसलिए बहु-पंक्ति मोड में उपयोग नहीं किया जा सकता है।

यह मूल बातें बताता है, और इसके बाद आप अगले लेख को देख सकते हैं कि आप व्यवस्थित रूप से नियमित अभिव्यक्ति कैसे सीख सकते हैं ((2)): उन्नत लेख।

आईओएस_कोसोन्को की पुस्तिका से अनुप्रेषित


अधिक