नवीनतम लेख
घर / इंटरनेट / पीएचपी रेगुलर एक्सप्रेशन प्रीग मैच। PHP में रेगुलर एक्सप्रेशन. डबल कोट्स को स्मार्ट कोट्स से बदलना

पीएचपी रेगुलर एक्सप्रेशन प्रीग मैच। PHP में रेगुलर एक्सप्रेशन. डबल कोट्स को स्मार्ट कोट्स से बदलना


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


रेगुलर एक्सप्रेशन एक विशेष भाषा में लिखे गए एक्सप्रेशन हैं।


चिंतित न हों, भाषा समझने में काफी आसान है, आपको बस अनुभव और अभ्यास की आवश्यकता है। मुझे लगता है कि आपने बार-बार ऐसी स्थितियों का सामना किया है जहां आपके पास पाठ है (उदाहरण के लिए, में)।माइक्रोसॉफ्ट वर्ड


) और आपको इसमें कुछ महत्वपूर्ण खोजने की आवश्यकता है। यदि आप जानते हैं कि आप वास्तव में क्या खोज रहे हैं, तो सब कुछ सरल है: खोज संवाद को कॉल करें, खोज शब्द दर्ज करें, बटन दबाएं और वॉइला - पाठ मिल गया है। लेकिन आप क्या करेंगे यदि आपको पहले से ही पता हो कि आप किस प्रकार की जानकारी खोज रहे हैं? उदाहरण के लिए, आपके सामने सभी पते ढूँढ़ने का कार्य हैईमेल

कुछ सौ शीटों के एक दस्तावेज़ में। कुछ दस्तावेज़ को मैन्युअल रूप से देखेंगे, कुछ खोज में कुत्ते (@) को दर्ज करेंगे और उसे खोजेंगे। सहमत हूँ - दोनों विकल्प कठिन परिश्रम और धन्यवाद रहित कार्य हैं।

रेगुलर एक्सप्रेशन कुछ कानूनों और नियमों के अनुसार बनाई गई एक टेक्स्ट स्ट्रिंग है। एक स्ट्रिंग में वर्ण और वर्णों के समूह, मेटाकैरेक्टर, क्वांटिफ़ायर और संशोधक होते हैं।

में प्रतीकों के अंतर्गत इस मामले मेंकिसी भी वर्णमाला के किसी भी प्रतीक को समझा जाता है। और केवल पठनीय ही नहीं. आप किसी अभिव्यक्ति में आसानी से एक अपठनीय वर्ण सम्मिलित कर सकते हैं; ऐसा करने के लिए, आपको बस उसका कोड हेक्साडेसिमल रूप में जानना होगा। उदाहरण के लिए:

// पठनीय वर्ण a E // अपठनीय वर्ण और कोड \x41 - अक्षर "A" \x09 के समान - टैब वर्ण

एक वर्ण समूह क्रमिक रूप से लिखे गए कई वर्ण हैं:

एबीवीजी एसीजेडएमएस

मैं तुरंत आपका ध्यान आकर्षित करना चाहूंगा - नियमित अभिव्यक्ति में "स्पेस" को भी एक महत्वपूर्ण चरित्र माना जाता है, इसलिए अभिव्यक्ति लिखते समय सावधान रहें। उदाहरण के लिए, ये वर्ण समूह अलग-अलग अभिव्यक्तियाँ हैं:

एबीसी कहाँ, एबीसी कहाँ

भाषा का अगला तत्व रूपक है। उपसर्ग "मेटा" का अर्थ है कि ये प्रतीक कुछ अन्य प्रतीकों या उनके समूहों का वर्णन करते हैं। तालिका नियमित अभिव्यक्ति भाषा के मुख्य मेटाकैरेक्टर का वर्णन करती है:

विशेष वर्ण निर्दिष्ट करने के लिए मेटाअक्षर
() कोष्ठक. नेस्टेड अभिव्यक्तियों को परिभाषित करता है।
| चयन मेटाकैरेक्टर
^ लाइन मेटाकैरेक्टर की शुरुआत
$ पंक्ति मेटाकैरेक्टर का अंत
\एन लाइन फ़ीड वर्ण (हेक्स कोड 0x0A)
\आर कैरिज रिटर्न कैरेक्टर (हेक्स कोड 0x0D)
\टी टैब वर्ण (हेक्स कोड 0x09)
\xhh हेक्साडेसिमल कोड 0xhh के साथ एक वर्ण डालने पर, उदाहरण के लिए \x42 लैटिन अक्षर "बी" डालेगा
वर्णों के समूहों को निर्दिष्ट करने के लिए मेटाअक्षर
. बिंदु. कोई भी पात्र.
\डी अंक (0-9)
\डी कोई संख्या नहीं (0-9 वर्णों को छोड़कर कोई भी वर्ण)
\एस रिक्त वर्ण (आमतौर पर स्थान और टैब)
\एस गैर-रिक्त वर्ण (\s मेटाकैरेक्टर द्वारा पहचाने गए वर्णों को छोड़कर सभी)
\w एक "शब्दकोश" वर्ण (एक वर्ण जो शब्दों में प्रयोग किया जाता है। आमतौर पर सभी अक्षर, सभी संख्याएँ और एक अंडरस्कोर ("_"))
\W \w मेटाकैरेक्टर द्वारा परिभाषित वर्णों को छोड़कर सभी

तालिका के दूसरे भाग के मेटाअक्षरों को याद रखना बहुत आसान है। "डी" - अंक (अंक), "एस" - प्रतीक (प्रतीक), "डब्ल्यू" - शब्द (शब्द)। यदि अक्षर बड़ा है, तो आपको समूह विवरण में "नहीं" जोड़ना होगा।

आइए उदाहरण के लिए टेक्स्ट लें "लाल जर्सी पर नंबर 1812 है, और हरी जर्सी पर नंबर 2009 है।" आइए सबसे सरल नियमित अभिव्यक्तियों के उदाहरण देखें:

\d\d\d\d - 1812 और 2009 ढूंढेगा \D - सभी अक्षर, रिक्त स्थान और विराम चिह्न ढूंढेगा \s - पाठ में सभी रिक्त स्थान ढूंढेगा।

लेकिन हमारे उदाहरण में वर्ष को चार में नहीं, बल्कि दो अंकों में लिखा जा सकता है, शब्दों में अन्य विभक्तियाँ आदि हो सकती हैं। वर्गाकार कोष्ठकों का उपयोग करके निर्दिष्ट वर्णों के उपसमूह यहां सहायता कर सकते हैं:

मतलब कोई भी अंक (\d के समान) - मतलब एक सम अंक - मतलब लैटिन वर्णमाला का कोई भी प्रतीक (किसी भी मामले में) या अंक।

उदाहरण के लिए, परीक्षण स्ट्रिंग में अभिव्यक्ति \d\d\d केवल 1812 ढूंढेगी, लेकिन 2009 नहीं। इस अभिव्यक्ति को "चार अंकों के सभी अनुक्रम ढूंढें जहां अंतिम अंक 0,2,4,6 है या" के रूप में पढ़ा जाना चाहिए 8"।

हमारे पास केवल क्वांटिफ़ायर और संशोधक का उल्लेख करना बाकी है।

क्वांटिफ़ायर एक विशेष निर्माण है जो यह निर्धारित करता है कि किसी वर्ण या वर्णों के समूह को कितनी बार प्रदर्शित होना चाहिए। परिमाणक घुंघराले कोष्ठक "()" में लिखा गया है। दो रिकॉर्डिंग प्रारूप संभव हैं: सटीक और रेंज। सटीक प्रारूप इस प्रकार लिखा गया है:

यहां X पिछले प्रतीक या समूह को दोहराए जाने की संख्या है। उदाहरण के लिए अभिव्यक्ति

रिकॉर्डिंग का दूसरा रूप रेंज है। के रूप में दर्ज किया गया

(एक्स, वाई) // या (,वाई) // या (एक्स,)

जहां X न्यूनतम है और Y पुनरावृत्ति की अधिकतम संख्या है। उदाहरण के लिए:

"क्रम में लिखे गए दो से चार अंक" के रूप में पढ़ें। यदि सीमाओं में से एक निर्दिष्ट नहीं है, तो कोई सीमा नहीं मानी जाती है। उदाहरण के लिए:

\w(3,) - तीन या अधिक अक्षर। \d(,5) - वहां कोई संख्याएं ही नहीं हैं, या हैं, लेकिन पांच से अधिक नहीं।

क्वांटिफ़ायर को एकल वर्ण या समूह पर लागू किया जा सकता है:

[ए-या-या](1,3)

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

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

मेटाकैरेक्टर "*" को "शून्य या अधिक से कोई भी राशि" के रूप में पढ़ा जाता है, अर्थात। डिज़ाइन

उनकी पूर्ण अनुपस्थिति सहित लगातार अक्षरों की किसी भी संख्या को परिभाषित करता है।

"+" चिन्ह तारांकन चिह्न से केवल इस मायने में भिन्न है कि इसके लिए कम से कम एक अक्षर की आवश्यकता होती है। वे। डिज़ाइन

किसी भी डिजिटल अनुक्रम को एक या अधिक अंकों से मेल खाता है।

प्रतीक "?" एकल वर्ण की अनुपस्थिति या उपस्थिति से मेल खाता है। वे। डिज़ाइन

किसी भी डिजिटल अनुक्रम को एक या दो अंकों से मेल खाता है।

यहां लालच के रूप में एंटीफायर्स "*" और "+" की ऐसी विशेषता का उल्लेख करना उचित है। मुद्दा यह है कि डिफ़ॉल्ट रूप से ये वर्ण वर्णों के सबसे लंबे संभावित अनुक्रम के अनुरूप होते हैं। उदाहरण के लिए, पंक्ति "माँ ने फ्रेम धोया" के लिए अभिव्यक्ति:

हम "माँ सोप रा" चुनेंगे, जो कुछ हद तक अप्रत्याशित है, क्योंकि हमें "माँ" मिलने की उम्मीद थी। इस व्यवहार को बदलने के लिए, मेटाकैरेक्टर "?" का उपयोग करें (प्रश्न चिह्न) परिमाणवाचक के ठीक बाद लिखा जाता है। यह क्वांटिफायरों की "भूख" को सबसे लंबे समय के बजाय पहले मैच को वापस करने के लिए मजबूर करके सीमित करता है। अब पिछले उदाहरण को बदलते हैं:

और आवश्यक मिलान "मा" प्राप्त करें।

भाषा का अंतिम तत्व संशोधक है। संशोधक एक विशेष वर्ण है जो नियमित अभिव्यक्तियों के विश्लेषण के लिए "सिस्टम" मापदंडों को परिभाषित करता है। ऐसे केवल चार प्रतीक हैं, इन्हें व्यक्तिगत रूप से या एक साथ उपयोग किया जा सकता है:

मैं केस-असंवेदनशील मोड सक्षम करता है, अर्थात। अभिव्यक्ति में बड़े और छोटे अक्षरों में अंतर नहीं है।
एम इंगित करता है कि खोजे जा रहे पाठ को कई पंक्तियों से युक्त माना जाना चाहिए। डिफ़ॉल्ट रूप से, रेगुलर एक्सप्रेशन इंजन टेक्स्ट को एक स्ट्रिंग के रूप में मानता है, चाहे वह वास्तव में कुछ भी हो। तदनुसार, मेटाअक्षर "^" और "$" पूरे पाठ की शुरुआत और अंत को दर्शाते हैं। यदि यह संशोधक निर्दिष्ट है, तो वे पाठ की प्रत्येक पंक्ति की शुरुआत और अंत को क्रमशः इंगित करेंगे।
एस डिफ़ॉल्ट मेटाकैरेक्टर " है।" इसकी परिभाषा में न्यूलाइन वर्ण शामिल नहीं है। वे। मल्टीलाइन टेक्स्ट के लिए, एक्सप्रेशन /.+/ केवल पहली पंक्ति लौटाएगा, उम्मीद के मुताबिक पूरा टेक्स्ट नहीं। इस संशोधक को निर्दिष्ट करने से यह सीमा दूर हो जाती है।
यू डिफ़ॉल्ट रूप से सभी मात्रात्मक मेटाएक्टर्स को "गैर-लालची" बनाता है। भाषा के कुछ संशोधनों में (विशेष रूप से PHP में), "U" के बजाय, वर्ण "g" का उपयोग किया जाता है, जो अर्थ के साथ अधिक सुसंगत है ("g" अंग्रेजी के "greedy", "greedy" का संक्षिप्त रूप है) ).

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

PHP में रेगुलर एक्सप्रेशन.

PHP में रेगुलर एक्सप्रेशन के साथ काम करने के लिए विशेष फ़ंक्शन हैं, जिनकी सूची संक्षिप्त विवरणतालिका में दिए गए हैं:

int preg_match (स्ट्रिंग पैटर्न, स्ट्रिंग विषय [, सरणी मिलान])

फ़ंक्शन जाँचता है कि विषय की सामग्री पैटर्न पैटर्न से मेल खाती है या नहीं। यदि मिलान पाया जाता है तो 1 लौटाता है, अन्यथा 0 लौटाता है। यदि आप वैकल्पिक मिलान सरणी पैरामीटर निर्दिष्ट करते हैं, तो जब फ़ंक्शन निष्पादित होता है, तो इसमें एक एकल तत्व दर्ज किया जाएगा - पहला मिलान पाया गया।

int preg_match_all (स्ट्रिंग पैटर्न, स्ट्रिंग विषय, सरणी मिलान [, int क्रम])
फ़ंक्शन पिछले वाले के समान है, एकमात्र अंतर के साथ - यह संपूर्ण पाठ को खोजता है और मिलान सरणी में पाए गए सभी मिलान लौटाता है।
मिश्रित preg_replace (मिश्रित पैटर्न, मिश्रित प्रतिस्थापन, मिश्रित विषय [, int सीमा])
अपने दोनों पूर्ववर्ती कार्यों की तरह, preg_replace पाठ के एक टुकड़े की खोज करता है जो एक पैटर्न से मेल खाता है। फ़ंक्शन सभी पाए गए अंशों को पैरामीटर में निर्दिष्ट पाठ से बदल देता है।
मिश्रित preg_replace_callback (मिश्रित पैटर्न, मिश्रित कॉलबैक, मिश्रित विषय [, int सीमा])
यह फ़ंक्शन पिछले वाले का विस्तारित संस्करण है। मुख्य अंतर यह है कि यह फ़ंक्शन पैरामीटर में फ़ंक्शन का नाम पारित करता है जो टेक्स्ट का विश्लेषण करेगा और प्रतिस्थापन टेक्स्ट उत्पन्न करेगा।
सरणी preg_split (स्ट्रिंग पैटर्न, स्ट्रिंग विषय [, पूर्णांक सीमा [, पूर्णांक झंडे]])
यह फ़ंक्शन विस्फोट() और विभाजन() फ़ंक्शन के समान है। इसकी ख़ासियत यह है कि विभाजक एक निश्चित स्ट्रिंग नहीं है, बल्कि एक नियमित अभिव्यक्ति है। फ़ंक्शन स्रोत डेटा को तत्वों में विभाजित करता है और उन्हें आउटपुट सरणी में रखता है।
सरणी preg_grep (स्ट्रिंग पैटर्न, सरणी इनपुट)
फ़ंक्शन को सरणियों में नियमित खोज के लिए डिज़ाइन किया गया है। खोज के लिए, एक टेम्प्लेट और इनपुट डेटा की एक सरणी निर्दिष्ट की जाती है, और एक एरे लौटाया जाता है जिसमें केवल वे तत्व शामिल होते हैं जो टेम्प्लेट से मेल खाते हैं।

विचार किए गए कार्यों की सूची पूर्ण नहीं है, लेकिन नियमित अभिव्यक्तियों के साथ काम करने की सफल शुरुआत के लिए यह काफी पर्याप्त है। यदि आप इस विषय में रुचि रखते हैं, तो अतिरिक्त साहित्य पढ़ना सुनिश्चित करें (उदाहरण के लिए, फ्रीडल की पुस्तक "रेगुलर एक्सप्रेशंस")। इसके अलावा, प्रशिक्षण उद्देश्यों के लिए, मैं इनमें से एक को स्थापित करने की अनुशंसा करता हूं विशेष कार्यक्रमनियमित अभिव्यक्तियों के परीक्षण के लिए (उदाहरण के लिए, "पीसीआरई" या "रेगएक्स बिल्डर")।

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

अब मेरे एक और प्रश्न का उत्तर दीजिए, इस उदाहरण में रेगुलर एक्सप्रेशन कहाँ है? मुझे आशा है कि आपने अनुमान लगा लिया होगा कि यहाँ नियमित अभिव्यक्ति वही है जो हम "परीक्षण" शब्द में तलाश रहे हैं। अर्थात्, इस उदाहरण में अक्षर "ई" एक नियमित अभिव्यक्ति है।

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

पहली नियमित अभिव्यक्ति

सिद्धांत रूप में, हम समझते हैं कि "परीक्षण" शब्द में "ई" वर्ण को कैसे खोजा जाए, लेकिन व्यवहार में इसे कैसे लागू किया जाता है? PHP में रेगुलर एक्सप्रेशन का उपयोग करने के लिए, आमतौर पर निम्नलिखित फ़ंक्शन का उपयोग किया जाता है:

preg_match ("नियमित अभिव्यक्ति (पैटर्न)", "वेरिएबल जिसमें खोज की जाती है", "वेरिएबल जिसमें खोज परिणाम सहेजा जाता है (वैकल्पिक पैरामीटर)"); - मिलान समारोह
preg_replace ("रेगुलर एक्सप्रेशन (पैटर्न)", "मिले हुए मैच को किसके साथ बदलें", "वेरिएबल जिसमें प्रतिस्थापन किया गया है"); - फ़ंक्शन बदलें

आइए इन फ़ंक्शंस का उपयोग शुरू करें यहां "परीक्षण" शब्द में "ई" वर्ण की खोज का एक उदाहरण दिया गया है:

$a = "परीक्षण";
if(preg_match("/e/",$a)) इको "मिल गया!!";

कोड स्थिति का वर्णन करता है: यदि पैटर्न से मेल खाने वाली कोई चीज़ वेरिएबल $a में पाई जाती है, तो संदेश "मिल गया!!" प्रदर्शित करें। जैसा कि आपने देखा होगा, हमारा टेम्प्लेट दो "/" के बीच स्थित है। इस मामले में, "/" प्रतीक हमारे पैटर्न की शुरुआत और अंत का प्रतीक है। मुझे लगता है, यह स्पष्ट है।

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

इस पत्र को कैसे खोजें? अंग्रेजी वर्णमाला का कोई भी अक्षर हो सकता है, आप इसे कैसे पहचान सकते हैं? आपने स्वयं अपने प्रश्न का उत्तर दिया, कोई अक्षर है, अर्थात वह a से z तक की सीमा में है। आप नियमित अभिव्यक्तियों में श्रेणियों का उपयोग कर सकते हैं। यदि हम नहीं जानते कि हम किस वर्ण की तलाश कर रहे हैं, लेकिन हम निश्चित रूप से जानते हैं कि यह वर्ण अंग्रेजी वर्णमाला का एक अक्षर है, तो प्रविष्टि इस प्रकार होगी:

$a = "123a321";
if(preg_match("//",$a)) इको "मिल गया!!";

ध्यान दें कि सीमा "[" "]" कोष्ठक में संलग्न है। इन कोष्ठकों में संलग्न किसी भी चीज़ को एकल वर्ण के रूप में परिभाषित किया गया है, इस मामले में वर्ण a से z तक होता है। यदि हमें कोई अक्षर नहीं, बल्कि एक संख्या ढूंढनी है, तो प्रविष्टि इस प्रकार होगी:

$a = "abc1cba";
if(preg_match("//",$a)) इको "मिल गया!!";

मैं यह भी नोट करना चाहता हूं कि रेगुलर एक्सप्रेशन केस सेंसिटिव होते हैं, इसलिए "ए" और "ए" अक्षर पूरी तरह से अलग हैं, दोनों अक्षरों को खोजने के लिए, इस तरह लिखें:

$a = "123a321";
if(preg_match("//",$a)) इको "मिल गया!!";

रूसी अक्षरों की खोज भी अंग्रेजी अक्षरों की तरह ही की जाती है:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) इको "मिल गया!!";

अक्षरों से परे

हमने सीखा कि किसी स्ट्रिंग में किसी अज्ञात वर्ण की खोज कैसे करें। यदि हमें कई पात्र ढूंढने की आवश्यकता हो तो क्या करें? तथाकथित मेटासिम्बल बचाव में आते हैं... मान लीजिए कि हमारे पास संख्याओं और अक्षरों के साथ एक स्ट्रिंग है, तो हम टेम्पलेट में इसका वर्णन कैसे कर सकते हैं? आप ऐसा कर सकते हैं:

पंक्ति - 123a321
नमूना -

हम्म... टेम्पलेट वास्तव में हमारी स्ट्रिंग से मेल खाता है, और जब अनुपालन के लिए जाँच की जाती है तो यह लंबे समय से प्रतीक्षित सत्य देगा! लेकिन क्या आपको नहीं लगता कि यह एक बोझिल रिकॉर्ड है?

इसे छोटा करने का तरीका यहां बताया गया है:

पंक्ति - 123a321
नमूना - *

मुझे ऐसा लगता है कि यह छोटा है "*" चिन्ह क्या है? यह वही मेटासिम्बल है, इसका मतलब है कि जिस प्रतीक का हमने वर्णन किया है (अर्थात्, एक प्रतीक जिसमें 0 से 9 तक की संख्याएँ या अंग्रेजी वर्णमाला के अक्षर, a से z तक) हो सकते हैं, उन्हें अनिश्चित काल तक, या एक से अधिक बार दोहराया जा सकता है। हां हां! यह मेटासिम्बल एक खाली वेरिएबल में एक मैच ढूंढेगा, क्योंकि हमारे द्वारा वर्णित प्रतीक की अनुपस्थिति भी सत्य वापस आ जाएगी! यह याद रखना

वहाँ अन्य कौन से मेटाएक्टर हैं?

उदाहरण के लिए, मेटाकैरेक्टर "+" यह एक छोटे अपवाद के साथ लगभग मेटाकैरेक्टर "*" के समान है। "*" कोई वर्ण न होने पर भी सत्य लौटेगा, और "+" कम से कम एक वर्ण की उपस्थिति की जाँच करेगा। अर्थात्, यदि किसी पंक्ति में कम से कम एक अक्षर की आवश्यकता है, तो "*" के स्थान पर "+" का प्रयोग करें।

मेटाकैरेक्टर "?" का प्रयोग भी अक्सर किया जाता है। इसका मतलब है कि पंक्ति में एक से अधिक वांछित वर्ण नहीं होने चाहिए। मेरे द्वारा वर्णित अंतिम दो मेटाकैरेक्टरों के लिए मैं कुछ उदाहरण देता हूँ।

मान लीजिए हमें उपयोगकर्ता के पासवर्ड की शुद्धता की जांच करने की आवश्यकता है। आइए विचार करें कि उपयोगकर्ता पासवर्ड में क्या होना चाहिए? खैर, सबसे पहले, यह कम से कम एक अक्षर होना चाहिए। दूसरे, इसमें केवल अंग्रेजी वर्णमाला के अंक और अक्षर होने चाहिए, इसलिए नियमित अभिव्यक्ति इस तरह दिखेगी:

$a = "qwerty12345";

हम किन पात्रों की अनुमति देते हैं? किसी भी मामले और संख्या के अंग्रेजी अक्षर. अब पासवर्ड की जगह एक खाली लाइन छोड़ने का प्रयास करें।

$ए = "";
if(preg_match("/+/",$a)) इको "पासवर्ड सही है";

आपको "पासवर्ड सही है" संदेश नहीं दिखेगा. क्यों? क्योंकि "+" मेटाकैरेक्टर ने यह देखने के लिए स्ट्रिंग की जाँच की कि क्या इसमें कम से कम एक वर्ण है।

और अब एक छोटी सी तरकीब, आइए हमारी अभिव्यक्ति पर एक नज़र डालें, हमने अनुमति नहीं दी, ठीक है, मान लीजिए इसमें एक जगह है, है ना? पासवर्ड के अंत में एक जगह रखें और चलाएं

$a = "qwerty12345";
if(preg_match("/+/",$a)) इको "पासवर्ड सही है";

और हम सही पासवर्ड के बारे में अपना संदेश क्यों देखते हैं? यह काफी सरल है... फ़ंक्शन preg_match(); पहले मैच में इसकी जाँच बंद कर देता है। अर्थात्, प्रतीक "q" हमारे द्वारा वर्णित पैटर्न पर फिट बैठता है, और बाकी सब कुछ अब फ़ंक्शन के लिए महत्वपूर्ण नहीं है, हमें क्या करना चाहिए? इसे ठीक करने का तरीका यहां बताया गया है:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) इको "पासवर्ड सही है";

किसी अभिव्यक्ति की शुरुआत में "^" और अंत में "$" जोड़कर, हम फ़ंक्शन को बताते हैं कि संपूर्ण स्ट्रिंग को पैटर्न से मेल खाना चाहिए। यदि आप यह कोड चलाते हैं, तो आपको संदेश नहीं दिखेगा, क्योंकि पासवर्ड के अंत में एक अवैध अक्षर है - एक स्थान

अब मेटाकैरेक्टर "+" को मेटाकैरेक्टर "?" में बदलें। आपको क्या लगता है क्या होगा? सही बात यह है कि पासवर्ड की शुद्धता के बारे में कोई संदेश नहीं होगा, क्योंकि पासवर्ड में एक से अधिक अक्षर हैं। मुझे आशा है कि मैंने इन तीन अक्सर उपयोग किए जाने वाले मेटाकैरेक्टर के काम को ठीक से समझाया है

कभी-कभी "नहीं" बेहतर होता है

हमने कम से कम यह जान लिया है कि पासवर्ड की जांच कैसे करें कि यह सही है, और यह अच्छा है! आइए मैं आपको स्ट्रिंग में कुछ खोजने के दूसरे तरीके के बारे में बताता हूं। मान लीजिए कि हमें एक स्ट्रिंग में संख्याओं की अनुपस्थिति की जाँच करने की आवश्यकता है। यह कैसे करें? यहाँ पंक्ति है:

(मैंने विशेष रूप से इन "-_+()" प्रतीकों को इसमें शामिल किया ताकि जीवन शहद जैसा न लगे...) हम निम्नलिखित अभिव्यक्ति तैयार कर सकते हैं:

लेकिन आपको यह स्वीकार करना होगा कि हम हमेशा यह नहीं जानते कि किसी पंक्ति में कौन से वर्णों का उपयोग किया गया है, लेकिन हम यह निश्चित रूप से जानते हैं कि इसमें संख्याएँ नहीं होनी चाहिए! इसलिए, केवल एक ऐसा टेम्प्लेट लिखना अधिक तर्कसंगत होगा जो उन पंक्तियों को छोड़ देगा जिनमें संख्याएँ नहीं हैं, न कि वे जिनमें "हे भगवान, कितने समझ से बाहर अक्षर हैं!!!" . ऐसी समस्याओं के लिए सही ढंग से रचित अभिव्यक्ति का एक उदाहरण यहां दिया गया है:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) इको "कोई संख्या नहीं!";

हमने यह कैसे हासिल किया? हमने प्रतीक दर्ज किया, लेकिन!

ठीक है, चलो इसे धीरे-धीरे समाप्त करें... मैं स्पष्टीकरण के साथ दो उदाहरण दूंगा, जिसके दौरान हम सीखेंगे कि खोज परिणाम को एक चर में कैसे सहेजना है, और शुद्धता के लिए डाक पते की जांच करना सीखें

मैंने इसे देखा और सहेज लिया!

मेरा चिट्ठा

$ए = " मेरा चिट्ठा";
preg_match("/ /", $a);

हमारी नियमित अभिव्यक्ति में, हमने उन सभी संभावित पात्रों का वर्णन किया है जिन्हें एक लिंक में शामिल किया जा सकता है। मैं हमारी अभिव्यक्ति में उद्धरण चिह्नों और "/" वर्णों पर भी ध्यान देना चाहता हूं, उनके पहले एक बैकस्लैश है, यह किस लिए है? तथ्य यह है कि "/" और उद्धरण स्वयं विशेष वर्ण हैं। और टेम्पलेट द्वारा उन्हें सामान्य प्रतीकों के रूप में समझने के लिए, हमें उन्हें स्क्रीन करने की आवश्यकता है। विशेष वर्णों से पहले बैकस्लैश जोड़कर एस्केप किया जाता है। मुझे आशा है कि यह स्पष्ट है

$ए = " मेरा चिट्ठा";
preg_match("/ /", $a, $b);

खैर, तदनुसार, वेरिएबल $b के रूप में एक अतिरिक्त पैरामीटर जोड़ना आवश्यक है, जिसमें पाया गया लिंक संग्रहीत किया जाएगा। आपको यह भी जानना होगा कि खोज परिणाम एक सरणी में रखा गया है। इसलिए, वेरिएबल $b एक सरणी है। जो जानकारी हम खोज रहे हैं वह इंडेक्स 1 के अंतर्गत है। इसका मतलब है कि खोज परिणाम वेरिएबल $बी में है। आइए स्क्रीन पर परिणाम प्रदर्शित करें:

$ए = " मेरा चिट्ठा";
preg_match("/ /", $a, $b);
प्रतिध्वनि $बी;

सही पता ही सफलता की कुंजी है!

और अंत में, प्रश्न का उत्तर, क्या ई-मेल सही है? सबसे पहले, आपको यह पता लगाना होगा कि पतों में किन वर्णों की अनुमति है? जहाँ तक मुझे पता है, अनुमत पात्रों में शामिल हैं:

  • अंग्रेजी अक्षर, अंक, "_", "-" उम्म्म्म सब कुछ लगता है... हम इसी से आगे बढ़ेंगे।
  • आगे हमारे पास "@" है
  • बाद में, अंग्रेजी अक्षर
  • अगली अवधि
  • और फिर अंग्रेजी अक्षर...

तो नियमित अभिव्यक्ति इस प्रकार होगी:

$ए = " [ईमेल सुरक्षित]";
if(preg_match("/^+@+.+$/", $a)) इको "ई-मेल पता सही है!";
अन्यथा प्रतिध्वनि "ई-मेल पता सही ढंग से नहीं लिखा गया है!";

ख़ैर... मुझे उम्मीद है कि अब ऐसे रिकॉर्ड्स से आपको डर नहीं लगेगा और आप इन्हें भली-भांति समझ सकेंगे।

अंत में मैं कुछ कहना चाहता हूं. लेख बोझिल निकला और साथ ही इसमें संभावनाओं का केवल एक हिस्सा ही शामिल किया गया। यदि आप यह वाक्य पढ़ रहे हैं, तो संभवतः आपने इसे अंत तक पढ़ा है, जिसके लिए आपका बहुत-बहुत धन्यवाद

जहां तक ​​सीएमएस ब्लॉग के विकास पर लेखों की श्रृंखला का सवाल है, मैं श्रृंखला के पहले भाग को बंद घोषित करता हूं!

नियमित अभिव्यक्ति आपको एक स्ट्रिंग में अनुक्रम ढूंढने की अनुमति देती है जो एक पैटर्न से मेल खाती है। उदाहरण के लिए, टेम्प्लेट "वास्या(.*)पुपकिन" आपको एक अनुक्रम खोजने की अनुमति देगा जब वास्या और पुपकिन शब्दों के बीच किसी भी वर्ण की संख्या हो। यदि हमें छह अंक खोजने की आवश्यकता है, तो हम "(6)" लिखते हैं (उदाहरण के लिए, यदि छह से आठ अंक हैं, तो "(6,8)")। यह वर्ण सेट संकेतक और आवश्यक संख्या संकेतक जैसी चीज़ों को अलग करता है:

वर्णों के एक सेट के बजाय, किसी भी वर्ण के पदनाम का उपयोग किया जा सकता है - एक बिंदु; वर्णों का एक विशिष्ट सेट निर्दिष्ट किया जा सकता है (अनुक्रम समर्थित हैं - उल्लिखित "0-9")। "छोड़कर" का संकेत हो सकता हैयह सेट

अक्षर"। आधिकारिक PHP दस्तावेज़ में वर्णों की संख्या को "क्वांटिफ़ायर" कहा जाता है। यह शब्द सुविधाजनक है और इसमें ग़लतफ़हमियाँ नहीं हैं। तो, एक क्वांटिफायर का या तो एक विशिष्ट मान हो सकता है - या तो एक निश्चित मान ("(6)"), या एक संख्यात्मक अंतराल ("(6,8)"), या एक सार "कोई भी संख्या, जिसमें 0" ("( " *"), "कोईप्राकृतिक संख्या

- 1 से अनंत तक ("+": "दस्तावेज़+.txt"), "या तो 0 या 1" ("?")। इस वर्ण सेट के लिए डिफ़ॉल्ट परिमाणक एक है ("document.txt")।

संयोजनों के लिए अधिक लचीली खोज के लिए, इन "वर्ण सेट - क्वांटिफ़ायर" लिंक को मेटास्ट्रक्चर में जोड़ा जा सकता है।

किसी भी लचीले उपकरण की तरह, नियमित अभिव्यक्तियाँ लचीली होती हैं, लेकिन बिल्कुल नहीं: उनके अनुप्रयोग का क्षेत्र सीमित होता है। उदाहरण के लिए, यदि आपको पाठ में एक निश्चित स्ट्रिंग को दूसरे के साथ बदलने की आवश्यकता है, तो एक को फिर से ठीक करें, str_replace का उपयोग करें। PHP डेवलपर्स आपसे रोते हुए विनती करते हैं कि इस उद्देश्य के लिए जटिल फ़ंक्शन ereg_replace या preg_replace का उपयोग न करें, क्योंकि जब उन्हें कॉल किया जाता है, तो स्ट्रिंग व्याख्या की प्रक्रिया होती है, और यह गंभीर रूप से सिस्टम संसाधनों की खपत करता है। दुर्भाग्य से, यह शुरुआती PHP प्रोग्रामर्स का पसंदीदा रेक है। रेगुलर एक्सप्रेशन फ़ंक्शंस का उपयोग केवल तभी करें जब आपको ठीक से पता न हो कि कौन सी स्ट्रिंग है। उदाहरण: खोज कोड जिसमें सेवा वर्ण और छोटे शब्द खोज स्ट्रिंग से काट दिए जाते हैं, साथ ही अतिरिक्त रिक्त स्थान भी काट दिए जाते हैं (या बल्कि, सभी रिक्त स्थान संपीड़ित होते हैं: "+" को एक स्थान से बदल दिया जाता है)। इन फ़ंक्शन का उपयोग करके, मैं अपनी समीक्षा छोड़ने वाले उपयोगकर्ता के ईमेल की जांच करता हूं। ऐसा बहुत कुछ किया जा सकता है, लेकिन यह ध्यान रखना महत्वपूर्ण है कि नियमित अभिव्यक्तियाँ सर्वशक्तिमान नहीं हैं। उदाहरण के लिए, में एक जटिल प्रतिस्थापनइन्हें न करना ही बेहतर है. आख़िरकार, उदाहरण के लिए, प्रोग्राम के संदर्भ में संयोजन "(.*)" का अर्थ है पाठ के सभी वर्णों को खोजना। और यदि टेम्प्लेट पंक्ति की शुरुआत या अंत से बंधा नहीं है, तो टेम्प्लेट स्वयं पूरे पाठ के माध्यम से प्रोग्राम द्वारा "स्थानांतरित" किया जाता है, और परिणाम दोहरी खोज, या बल्कि खोज वर्ग होता है। यह अनुमान लगाना कठिन नहीं है कि एक अन्य संयोजन "(.*)" का अर्थ है एक घन पर पुनरावृत्ति करना, इत्यादि। मान लीजिए, 5 किलोबाइट टेक्स्ट को तीसरी शक्ति तक बढ़ाएँ। यह 125,000,000,000 (शब्दों में: एक सौ पच्चीस अरब संचालन) निकला। बेशक, यदि आप सख्त रुख अपनाते हैं, तो इतने सारे ऑपरेशन नहीं होंगे, लेकिन चार से आठ गुना कम होंगे, लेकिन संख्याओं का क्रम ही महत्वपूर्ण है।

चरित्र सेट
. डॉटकोई भी पात्र
[] वर्गाकार कोष्ठकचरित्र वर्ग ("कोई भी")। उदाहरण के लिए
[^] नकारात्मक चरित्र वर्ग ("कोई भी छोड़कर")
- थोड़ा साएक वर्ण वर्ग में अनुक्रम पदनाम ("" अंक)
\डी केवल संख्याएँ
\डी[^0-9] संख्याओं के अलावा
\w अक्षर और संख्या
\W[^a-z0-9]अक्षरों और संख्याओं के अलावा
\एस व्हाइटस्पेस वर्ण: स्पेस, टैब, न्यूलाइन
\एस[^ ] रिक्त स्थान वर्णों को छोड़कर
| (एक|अन्य)इस स्थान पर सूचीबद्ध विकल्पों में से एक हो सकता है, उदाहरण के लिए: (वास्या|पेट्या|माशा)। यदि आप नहीं चाहते कि इसे चयन में शामिल किया जाए, तो (?: ...) का उपयोग करें

केवल एक को दर्शाने के लिए वर्ण वर्ग का उपयोग न करें ("+" के बजाय "+" ठीक रहेगा)। वर्ण वर्ग में एक बिंदु न लिखें; यह कोई भी वर्ण है, तो वर्ग में अन्य वर्ण अतिश्योक्तिपूर्ण होंगे (और अंदर)। नकारात्मक वर्गइसके परिणामस्वरूप सभी वर्णों का निषेध हो जाएगा)।

परिमाणक

एक परिमाणक एक विशिष्ट मान और सीमा दोनों को इंगित कर सकता है। यदि दी गई संख्या क्वांटिफायर की सीमा के भीतर आती है, तो अभिव्यक्ति खंड को पार्स की जा रही स्ट्रिंग से मेल खाने वाला माना जाता है। सिंटेक्स:

{ }

{ , }

यदि आपको केवल आवश्यक न्यूनतम इंगित करने की आवश्यकता है, लेकिन कोई अधिकतम नहीं है, तो बस अल्पविराम लगाएं और दूसरा नंबर न लिखें: "(5,)" ("न्यूनतम 5")। सबसे अधिक उपयोग किए जाने वाले क्वांटिफायर के लिए विशेष नोटेशन हैं:

व्यवहार में, ऐसे प्रतीकों का उपयोग घुंघराले ब्रेसिज़ की तुलना में अधिक बार किया जाता है।

एंकर

ये अक्षर क्रमशः पंक्ति के बिल्कुल आरंभ और अंत में दिखाई देने चाहिए।

लालच प्रश्न चिह्न एक क्वांटिफ़ायर मिनिमाइज़र के रूप में भी कार्य करता है:
.*?

उदाहरण का परिणाम: लालची संस्करण: बोल्ड टेक्स्ट [बी]और यहां - और भी बोल्डर लौटाया गया आलसी संस्करण: बोल्ड टेक्स्ट [बी]और यहां - और भी बोल्डर लौटाया गया

टेम्प्लेट लाइन, जैसा कि आप पहले ही देख चुके हैं, स्लैश के साथ शुरू और समाप्त होती है। दूसरे के बाद पैरामीटर हैं:

मैंकेस-असंवेदनशील खोज
एम

मल्टीलाइन मोड. डिफ़ॉल्ट रूप से, पीसीआरई केवल एक पंक्ति के भीतर पैटर्न मिलान की तलाश करता है, और "^" और "$" अक्षर केवल पूरे पाठ की शुरुआत और अंत से मेल खाते हैं।

एसजब यह विकल्प सेट किया जाता है, तो "^" और "$" अलग-अलग पंक्तियों की शुरुआत और अंत से मेल खाते हैं।
प्रतीक "।" (डॉट) लाइन ब्रेक से भी मेल खाता है (डिफ़ॉल्ट संख्या)
पाठ की शुरुआत में लंगर डालें
यू"$" वर्ण को केवल पाठ के अंत से मेल खाने के लिए बाध्य करता है।
यदि पैरामीटर m सेट है तो इसे अनदेखा कर दिया जाता है।प्रत्येक क्वांटिफायर के लिए "लालची" को उलट देता है (यदि क्वांटिफायर के बाद "?" आता है, तो वह क्वांटिफायर अब "लालची" नहीं है)।
  • प्रतिस्थापन स्ट्रिंग को PHP कोड के रूप में समझा जाता है।
  • नियमित अभिव्यक्ति के साथ काम करने के लिए कार्य preg_grep preg_match - मिलान जांच करता है
  • नियमित अभिव्यक्ति
  • . यह फ़ंक्शन केवल पहले मैच के लिए दिखता है! preg_match_all preg_quote - रेगुलर एक्सप्रेशन में वर्णों को छोड़ देता है।
  • वे। सभी सेवा वर्णों से पहले स्लैश सम्मिलित करता है (उदाहरण के लिए, कोष्ठक,
  • वर्गाकार कोष्ठक
  • आदि) ताकि उन्हें शाब्दिक रूप से लिया जाए। यदि आपके पास कोई उपयोगकर्ता इनपुट है और आप इसे नियमित अभिव्यक्तियों का उपयोग करके जांच रहे हैं, तो ऐसा करने से पहले आने वाले चर में सेवा वर्णों से बचना बेहतर है
preg_replace

preg_replace_callback - नियमित अभिव्यक्ति खोज और प्रतिस्थापन करता है

preg_split

preg_grep

preg_grep फ़ंक्शन - एक पैटर्न से मेल खाने वाली घटनाओं की एक श्रृंखला लौटाता है

सिंटेक्स

सरणी preg_grep (स्ट्रिंग पैटर्न, सरणी इनपुट [, पूर्णांक झंडे])
preg_grep() इनपुट सरणी के तत्वों से युक्त एक सरणी लौटाता है जो दिए गए पैटर्न से मेल खाता है। झंडे पैरामीटर निम्नलिखित मान ले सकते हैं: PREG_GREP_INVERT
यदि यह ध्वज सेट है, तो preg_grep() फ़ंक्शन उन्हें लौटाता है
सरणी तत्व

, जो दिए गए पैटर्न पैटर्न से मेल नहीं खाता है।

preg_grep() द्वारा लौटाया गया परिणाम मूल डेटा सरणी के समान अनुक्रमणिका का उपयोग करता है। यदि यह व्यवहार आपके अनुरूप नहीं है, तो पुन: अनुक्रमणिका के लिए preg_grep() द्वारा लौटाए गए सरणी पर array_values() का उपयोग करें।

उदाहरण कोड:

preg_split

// सभी सरणी तत्वों को लौटाता है // जिसमें फ़्लोटिंग पॉइंट नंबर होते हैं $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);

preg_match preg_match फ़ंक्शन - रेगुलर एक्सप्रेशन के विरुद्ध मिलान निष्पादित करता हैमिलान निर्दिष्ट किया गया है, यह खोज परिणामों से भर जाएगा। $matches तत्व में स्ट्रिंग का वह भाग शामिल होगा जो पूरे पैटर्न से मेल खाता है, $matches में स्ट्रिंग का वह भाग होगा जो पहले उप-पैटर्न से मेल खाता है, इत्यादि।

झंडे निम्नलिखित मान ले सकते हैं:

PREG_OFFSET_CAPTURE

खोज पंक्ति की शुरुआत से बाएं से दाएं की जाती है। वैकल्पिक ऑफसेट पैरामीटर का उपयोग खोज के लिए वैकल्पिक प्रारंभिक स्थिति निर्दिष्ट करने के लिए किया जा सकता है। एक समान परिणाम विषय को सबस्ट्र())($विषय, $ऑफ़सेट) से प्रतिस्थापित करके प्राप्त किया जा सकता है।

Preg_match() फ़ंक्शन पाए गए मिलानों की संख्या लौटाता है। यह 0 (कोई मिलान नहीं मिला) और 1 हो सकता है, क्योंकि पहला मिलान मिलने के बाद preg_match() काम करना बंद कर देता है। यदि आपको सभी मिलान खोजने या गिनने की आवश्यकता है, तो आपको preg_match_all() फ़ंक्शन का उपयोग करना चाहिए। यदि निष्पादन के दौरान कोई त्रुटि होती है तो preg_match() फ़ंक्शन FALSE लौटाता है।

अनुशंसा: यदि आपको किसी दिए गए स्ट्रिंग में सबस्ट्रिंग की उपस्थिति की जांच करने की आवश्यकता है तो preg_match() फ़ंक्शन का उपयोग न करें। इसके लिए strpos() या strstr() का उपयोग करें क्योंकि वे काम बहुत तेजी से करेंगे।

उदाहरण कोड उदाहरण कोड उदाहरण कोड उदाहरण का परिणाम:

डोमेन नाम है: साइट

preg_match_all

preg_match_all फ़ंक्शन - एक स्ट्रिंग में वैश्विक पैटर्न खोज करता है

preg_split

int preg_match_all (स्ट्रिंग पैटर्न, स्ट्रिंग विषय, सरणी मिलान [, int फ़्लैग्स [, int ऑफ़सेट]])

पैटर्न पैटर्न के सभी मिलानों के लिए स्ट्रिंग विषय की खोज करता है और झंडे के संयोजन द्वारा निर्धारित क्रम में परिणाम को मिलान सरणी में रखता है।

पहला मिलान ढूंढने के बाद, बाद की खोजें स्ट्रिंग की शुरुआत से नहीं, बल्कि अंतिम पाई गई घटना के अंत से की जाएंगी।

वैकल्पिक झंडे पैरामीटर निम्नलिखित मानों को जोड़ सकते हैं (ध्यान रखें कि PREG_PATTERN_ORDER का उसी समय PREG_SET_ORDER के रूप में उपयोग करना अर्थहीन है):

PREG_PATTERN_ORDER
यदि यह ध्वज सेट किया गया है, तो परिणाम निम्नानुसार क्रमबद्ध किया जाएगा: $matches तत्व में पैटर्न की पूर्ण घटनाओं की एक सरणी होती है, $matches तत्व में पहले उप-पैटर्न की घटनाओं की एक सरणी होती है, और इसी तरह।

उदाहरण कोड उदाहरण का परिणाम: उदाहरण:, यह एक परीक्षण उदाहरण है:, यह एक परीक्षण है

जैसा कि हम देख सकते हैं, $out में पैटर्न की पूर्ण घटनाओं की एक सरणी होती है, और $out तत्व में टैग में निहित सबस्ट्रिंग की एक सरणी होती है।

PREG_SET_ORDER
यदि यह ध्वज सेट किया गया है, तो परिणाम निम्नानुसार क्रमबद्ध किया जाएगा: $matches तत्व में घटनाओं का पहला सेट होता है, $matches तत्व में घटनाओं का दूसरा सेट होता है, और इसी तरह।

उदाहरण कोड उदाहरण का परिणाम: उदाहरण:, उदाहरण: यह एक परीक्षण है, यह एक परीक्षण है

इस मामले में, $matches सरणी में मिलानों का पहला सेट होता है, अर्थात्: $matches तत्व में संपूर्ण पैटर्न की पहली घटना होती है, $matches तत्व में पहले उप-पैटर्न की पहली घटना होती है, और इसी तरह। इसी तरह, $matches सरणी में मिलानों का दूसरा सेट होता है, और इसी तरह प्रत्येक पाए गए मिलान के लिए।

PREG_OFFSET_CAPTURE
यदि यह ध्वज निर्दिष्ट किया गया है, तो प्रत्येक पाए गए सबस्ट्रिंग के लिए स्रोत स्ट्रिंग में उसकी स्थिति इंगित की जाएगी। यह याद रखना महत्वपूर्ण है कि यह ध्वज लौटाए गए डेटा के प्रारूप को बदलता है: प्रत्येक घटना को एक सरणी के रूप में लौटाया जाता है, जिसके शून्य तत्व में पाया गया सबस्ट्रिंग होता है, और पहले तत्व में ऑफसेट होता है।

यदि किसी ध्वज का उपयोग नहीं किया जाता है, तो डिफ़ॉल्ट PREG_PATTERN_ORDER है।

खोज पंक्ति के आरंभ से बाएँ से दाएँ की ओर की जाती है। वैकल्पिक ऑफसेट पैरामीटर का उपयोग खोज के लिए वैकल्पिक प्रारंभिक स्थिति निर्दिष्ट करने के लिए किया जा सकता है। एक समान परिणाम विषय को सबस्ट्र())($विषय, $ऑफ़सेट) से प्रतिस्थापित करके प्राप्त किया जा सकता है।

यदि निष्पादन के दौरान कोई त्रुटि हुई तो पाए गए पैटर्न की घटनाओं की संख्या (शून्य हो सकती है) या FALSE लौटाता है।

उदाहरण कोड उदाहरण कोड उदाहरण का परिणाम: मिलान किया गया: बोल्ड टेक्स्ट भाग 1: भाग 2: बोल्ड टेक्स्ट भाग 3: मिलान किया गया: मुझे क्लिक करेंभाग ---- पहला: भाग 2: मुझे क्लिक करें भाग 3: preg_quote

preg_quote फ़ंक्शन - नियमित अभिव्यक्तियों में वर्णों को छोड़ देता है

preg_split

स्ट्रिंग preg_quote (स्ट्रिंग str [, स्ट्रिंग सीमांकक])

Preg_quote() फ़ंक्शन स्ट्रिंग str लेता है और प्रत्येक विशेष वर्ण से पहले एक बैकस्लैश जोड़ता है। यह उपयोगी हो सकता है यदि टेम्पलेट में स्ट्रिंग वेरिएबल शामिल हैं, जिसका मान स्क्रिप्ट के संचालन के दौरान बदल सकता है।

यदि अतिरिक्त सीमांकक पैरामीटर निर्दिष्ट किया गया है, तो यह भी बच जाएगा। यह पीसीआरई कार्यों में उपयोग किए जाने वाले लिमिटर से बचने के लिए उपयोगी है। सबसे आम सीमांकक "/" वर्ण है।

रेगुलर एक्सप्रेशन में, निम्नलिखित वर्णों को सेवा वर्ण माना जाता है:। \\ + * ? [ ^ ] $ () ( ) = !< > | :

उदाहरण कोड उदाहरण कोड उदाहरण का परिणाम: यह पुस्तक है *बहुत*ढूंढना मुश्किल है. preg_replace

preg_replace फ़ंक्शन - रेगुलर एक्सप्रेशन का उपयोग करके खोज और प्रतिस्थापन करता है

preg_split

मिश्रित preg_replace (मिश्रित पैटर्न, मिश्रित प्रतिस्थापन, मिश्रित विषय [, int सीमा])

पैटर्न के मिलान के लिए स्ट्रिंग विषय की खोज करता है और उन्हें प्रतिस्थापन के साथ बदल देता है। यदि सीमा पैरामीटर निर्दिष्ट किया गया है, तो टेम्पलेट की सीमा आवृत्तियों को बदल दिया जाएगा; यदि सीमा हटा दी जाती है या -1 के बराबर हो जाती है, तो पैटर्न की सभी घटनाएं बदल दी जाएंगी।

प्रतिस्थापन में फॉर्म \\n या (PHP 4.0.4 के बाद से) $n के संदर्भ शामिल हो सकते हैं, बाद वाला बेहतर होगा। ऐसे प्रत्येक संदर्भ को कोष्ठक में संलग्न nवें उप-पैटर्न के अनुरूप एक सबस्ट्रिंग से प्रतिस्थापित किया जाएगा। n 0 से 99 तक मान ले सकता है, जिसमें संदर्भ \\0 (या $0) संपूर्ण उप-पैटर्न की घटना के अनुरूप है एक से शुरू करके बाएँ से दाएँ क्रमांकित किया गया।

उपपैटर्न संदर्भों का उपयोग करते हुए वाइल्डकार्ड प्रतिस्थापन का उपयोग करते समय, ऐसी स्थिति उत्पन्न हो सकती है जहां मास्क के तुरंत बाद एक नंबर आता है। इस मामले में, \\n जैसे नोटेशन के परिणामस्वरूप त्रुटि होती है: पहले उपपैटर्न के बाद नंबर 1 का संदर्भ \\11 के रूप में लिखा जाएगा, जिसे ग्यारहवें उपपैटर्न के संदर्भ के रूप में व्याख्या किया जाएगा। इस ग़लतफ़हमी को निर्माण \$(1)1 का उपयोग करके समाप्त किया जा सकता है, जो अंक 1 के बाद पहले उप-पैटर्न के लिए एक पृथक संदर्भ को इंगित करता है।

उदाहरण कोड

इस उदाहरण का आउटपुट होगा:

यदि फ़ंक्शन निष्पादन के दौरान कोई पैटर्न मिलान पाया जाता है, तो संशोधित विषय मान वापस कर दिया जाएगा, अन्यथा मूल विषय वापस कर दिया जाएगा।

Preg_replace() के पहले तीन पैरामीटर एक-आयामी सरणी हो सकते हैं। यदि सरणी कुंजियों का उपयोग करती है, तो सरणी को संसाधित करते समय उन्हें उसी क्रम में लिया जाएगा जिसमें वे सरणी में स्थित हैं। पैटर्न और प्रतिस्थापन के लिए सरणी में कुंजियाँ निर्दिष्ट करना वैकल्पिक है। यदि आप प्रतिस्थापन में शामिल पैटर्न और स्ट्रिंग से मिलान करने के लिए इंडेक्स का उपयोग करने का निर्णय लेते हैं, तो प्रत्येक सरणी पर ksort() फ़ंक्शन का उपयोग करें।

काला भालू धीरे-धीरे आलसी कुत्ते के ऊपर से कूद गया।

Ksort() का उपयोग करके हमें वांछित परिणाम मिलता है:

धीमा काला भालू आलसी कुत्ते के ऊपर से कूद गया।

यदि विषय पैरामीटर एक सरणी है, तो उसके प्रत्येक तत्व के लिए पैटर्न खोज और प्रतिस्थापन किया जाता है। लौटाया गया परिणाम भी एक सरणी होगा।

यदि पैटर्न और प्रतिस्थापन पैरामीटर सरणियाँ हैं, तो preg_replace() वैकल्पिक रूप से दोनों सरणियों से तत्वों की एक जोड़ी को पुनः प्राप्त करता है और उन्हें खोज और प्रतिस्थापन ऑपरेशन के लिए उपयोग करता है। यदि प्रतिस्थापन सरणी में पैटर्न से अधिक तत्व हैं, तो लापता तत्वों को बदलने के लिए खाली स्ट्रिंग्स ली जाएंगी। यदि पैटर्न एक सरणी है और प्रतिस्थापन एक स्ट्रिंग है, तो पैटर्न सरणी के प्रत्येक तत्व को खोजा जाएगा और पैटर्न के साथ प्रतिस्थापित किया जाएगा (सरणी के सभी तत्व बदले में पैटर्न होंगे, जबकि प्रतिस्थापन स्ट्रिंग स्थिर रहती है)। विकल्प जब पैटर्न एक स्ट्रिंग है और प्रतिस्थापन एक सरणी है तो इसका कोई मतलब नहीं है।

/e संशोधक preg_replace() फ़ंक्शन के व्यवहार को इस तरह से बदलता है कि प्रतिस्थापन पैरामीटर, आवश्यक प्रतिस्थापन करने के बाद, PHP कोड के रूप में व्याख्या किया जाता है और उसके बाद ही प्रतिस्थापन के लिए उपयोग किया जाता है। इस संशोधक का उपयोग करते समय सावधान रहें: प्रतिस्थापन पैरामीटर में वैध PHP कोड होना चाहिए, अन्यथा preg_replace() फ़ंक्शन कॉल वाली लाइन में एक सिंटैक्स त्रुटि उत्पन्न होगी।

नमूना कोड: एकाधिक पैटर्न द्वारा बदलें

यह उदाहरण आउटपुट देगा:

$startDate = "5/27/1999";

उदाहरण कोड: /e संशोधक का उपयोग करना उदाहरण कोड: सभी HTML टैग्स को अपरकेस preg_replace_callback में परिवर्तित करता है

preg_replace_callback फ़ंक्शन - कॉलबैक फ़ंक्शन का उपयोग करके नियमित अभिव्यक्ति खोज और प्रतिस्थापन करता है

preg_split

मिश्रित preg_replace_callback (मिश्रित पैटर्न, कॉलबैक कॉलबैक, मिश्रित विषय [, int सीमा])

इस फ़ंक्शन का व्यवहार कई मायनों में preg_replace() के समान है, सिवाय इसके कि प्रतिस्थापन पैरामीटर के बजाय, आपको एक कॉलबैक फ़ंक्शन निर्दिष्ट करना होगा, जो इनपुट पैरामीटर के रूप में पाई गई घटनाओं की एक सरणी को पारित करता है। अपेक्षित परिणाम वह स्ट्रिंग है जिसे प्रतिस्थापित किया जाएगा।

उदाहरण कोड (.*?).")", $xml, $matches, PREG_PATTERN_ORDER);

$मैच वापस करें; )

विशिष्ट विशेषता मान वाले XHTML/XML टैग खोजें

यह फ़ंक्शन पिछले वाले के समान ही है, सिवाय इसके कि आप टैग को वांछित विशेषता दे सकते हैं। उदाहरण के लिए, आप आसानी से पा सकते हैं।

फ़ंक्शन get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; अन्यथा $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value); $tag_regex = "/]*$attr\s*=\s*"। .*?)/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); $matches वापस करें; )

वेब डेवलपर्स के लिए एक और उपयोगी टूल! यह आपको हेक्साडेसिमल रंग मान ढूंढने/जांचने की अनुमति देता है।

$स्ट्रिंग = "#555555"; यदि (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "उदाहरण 6 सफल।"; )

लेख का शीर्षक खोजें

यह कोड स्निपेट HTML पेज पर टैग के अंदर टेक्स्ट को ढूंढेगा और प्रदर्शित करेगा।

$fp = fopen("http://www.catswhocode.com/blog","r"); जबकि (!feof($fp))( $पेज .= fgets($fp, 4096); ) $titre = eregi("(.*)",$पेज,$regs); प्रतिध्वनि $regs; fclose($fp);

अपाचे लॉग को पार्स करना

अधिकांश साइटें प्रसिद्ध अपाचे वेब सर्वर पर चलती हैं। यदि आपकी साइट उनमें से एक है, तो अपाचे लॉग को पार्स करने के लिए PHP और रेगुलर एक्सप्रेशन का उपयोग क्यों न करें?

//लॉग्स: अपाचे वेब सर्वर //केवल HTML फ़ाइलों पर सफल हिट। पृष्ठ दृश्यों की संख्या गिनने के लिए उपयोगी. "^((?#क्लाइंट आईपी या डोमेन नाम)एस+)एस+((?#बुनियादी प्रमाणीकरण)एस+एस+एस+)एस+[((?#दिनांक और समय)[^]]+)]एस+"(?: प्राप्त करें|पोस्ट|हेड) ((?#फ़ाइल)/[^ ?]+?.html?)?((?#parameters)[^ ?]+)? HTTP/+"s+(?#status कोड)200s+((?#बाइट्स स्थानांतरित)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user एजेंट )[^"]*)"$" //लॉग्स: अपाचे वेब सर्वर //404 त्रुटियां केवल "^((?#क्लाइंट आईपी या डोमेन नाम)एस+)एस+((?#बुनियादी प्रमाणीकरण)एस+एस+एस+) s+[((?#दिनांक और समय)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)?((?#parameters)[ ^ ?"]+)? HTTP/+"s+(?#status कोड)404s+((?#बाइट्स स्थानांतरित)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#उपयोगकर्ता एजेंट )[^"]*)"$"

डबल कोट्स को स्मार्ट कोट्स से बदलना

यदि आप टाइपोग्राफी के शौकीन हैं, तो आपको यह रेगुलर एक्सप्रेशन पसंद आएगा जो नियमित डबल कोट्स को स्मार्ट कोट्स से बदल देता है। वर्डप्रेस में पेज सामग्री में एक समान नियमित अभिव्यक्ति का उपयोग किया जाता है।

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $text);

व्यापक पासवर्ड सत्यापन

यह नियमित अभिव्यक्ति सुनिश्चित करेगी कि पाठ क्षेत्र में कम से कम छह अक्षर, संख्याएँ, हाइफ़न और अंडरस्कोर दर्ज किए गए हैं।

टेक्स्ट फ़ील्ड में कम से कम एक अपरकेस वर्ण, एक लोअरकेस वर्ण और एक संख्या होनी चाहिए।

"ए(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

वर्डप्रेस: ​​किसी पोस्ट से छवियाँ प्राप्त करने के लिए नियमित अभिव्यक्ति का उपयोग करना

चूंकि आप में से कई लोग वर्डप्रेस उपयोगकर्ता हैं, इसलिए आपको एक कोड की आवश्यकता हो सकती है जो आपको किसी लेख के पाठ से सभी छवियां प्राप्त करने और उन्हें प्रदर्शित करने की अनुमति देता है।

इस कोड का उपयोग करने के लिए, बस इसे अपनी थीम की किसी भी फ़ाइल में पेस्ट करें।