2009-01-27 11 views
13

PHP regexes के आस-पास के डिलीमीटर क्यों हैं? ऐसा प्रतीत होता है कि यदि कोई पैटर्न संशोधक किसी भी फ़ंक्शन का उपयोग किया जा रहा था, तो पैरामीटर के रूप में पारित किया गया था।PHP रेगेक्स डेलीमीटर, बिंदु क्या है?

उत्तर

6

कोई तकनीकी कारण नहीं है कि ऐसा क्यों होना चाहिए।

जैसा कि एक टिप्पणी में कहा गया है, अंतर्निहित लाइब्रेरी को रेगेक्स के हिस्से के रूप में फ़्लैग को पारित करने की आवश्यकता नहीं है - वास्तव में, विस्तार को इन्हें अलग करना होगा और उन्हें एक अलग तर्क के रूप में पास करना होगा।

ऐसा लगता है कि मूल कार्यान्वयनकर्ता इसे grep/sed/awk/perl/आदि जैसा दिखने की कोशिश कर रहा था ताकि यह उन उपकरणों से आने वाले प्रोग्रामर से अधिक परिचित हो।

+4

पीसीआरई आसपास के डिलीमीटरों को बिल्कुल अनुमति नहीं देता है। PHP preg फ़ंक्शंस उन्हें पीसीआरई लाइब्रेरी में पास करने से पहले उन्हें बंद कर देता है। –

+2

वाह, तो यह सभी सरासर कोशिश-टू-बी-पर्ल है? मैं वर्षों से वाक्यविन्यास क्षमा कर रहा था, लेकिन अब मैं वास्तव में इसे नफरत करने के लिए स्वतंत्र हूं। धन्यवाद! – Cal

+0

यह उत्तर व्यक्तिगत राय के लिए ठीक है, लेकिन यह सही नहीं है। – dreftymac

15

डिलीमीटर के कारण पैटर्न के बाद झंडे डालना है। तर्कसंगत रूप से झंडे को एक अलग पैरामीटर के रूप में पारित किया जा सकता है (जावा इसे इस तरह से कर सकता है) लेकिन जिस तरह से पर्ल ने इसे मूल रूप से (और इससे पहले/sed/awk/vi) किया था, इस तरह यह अब किया गया है।

आगे की कमी का उपयोग न करें: वे बहुत आम हैं। व्यक्तिगत रूप से मैं लगभग हमेशा उपयोग करते हैं! चरित्र। मैं शायद ही कभी इसके लिए देख रहा हूँ।

+1

नोट: जावा उदाहरण के लिए बहु-पंक्ति के लिए अपनी शुरुआत (? एम) पर regexp के भीतर झंडे भी शामिल कर सकता है। (एस) डॉटल के लिए, (? एमएस) दोनों के लिए, और इसी तरह। – VonC

+0

@ वॉनसी, तो पाइथन कर सकते हैं। –

+0

तो पर्ल, पीसीआरई, और यहां तक ​​कि PHP के preg फ़ंक्शन भी कर सकते हैं। लेकिन preg कार्यों में कुछ अतिरिक्त झंडे हैं जिन्हें केवल रेगेक्स के बाद निर्दिष्ट किया जा सकता है। –

6

मुझे नहीं पता कि प्रीग फ़ंक्शंस के डेवलपर्स के उद्देश्य क्या थे। एकमात्र कारण यह है कि मैं सोच सकता हूं कि उन्होंने पर्ल तरीके से काम करने के लिए थोड़ा मुश्किल प्रयास किया।

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

संबंधित मुद्दे