मुझे लगता है कि आपको केवल न्यूलाइन से मेल खाने वाले डॉट की तुलना में अधिक समस्याएं हैं, लेकिन मुझे फ़ॉर्मेटिंग अनुशंसा के साथ शुरू करने दें। आप किसी भी विराम चिह्न चरित्र के बारे में रेगेक्स डेलीमीटर के रूप में उपयोग कर सकते हैं, न केवल स्लैश ('/')। यदि आप किसी अन्य चरित्र का उपयोग करते हैं, तो आपको रेगेक्स के भीतर स्लेश से बचने की आवश्यकता नहीं होगी। मैं समझता हूं '%' PHPers के बीच लोकप्रिय है; कि अपने पैटर्न तर्क होगा:
'%\{a\}([.\n]+)\{/a\}%'
अब, कारण यह है कि regex आपकी इच्छानुसार काम नहीं किया, जब यह एक चरित्र वर्ग (वर्ग कोष्ठक) के अंदर दिखाई देती है क्योंकि डॉट अपनी विशेष अर्थ खो देता है है - तो [.\n]
बस एक डॉट या लाइनफीड से मेल खाता है। आप के लिए क्या देख रहे थे (?:.|\n)
था, लेकिन मैं गाड़ी-वापसी के साथ ही linefeed मिलान की सिफारिश की है |:
'%\{a\}((?:.|[\r\n])+)\{/a\}%'
ऐसा इसलिए है क्योंकि शब्द "न्यू लाइन" यूनिक्स शैली "\ n" का उल्लेख कर सकते है, विंडोज-शैली "\ r \ n", या पुरानी-मैक-शैली "\ r"। किसी भी दिए गए वेब पेज में उनमें से कोई भी या दो या दो से अधिक शैलियों का मिश्रण हो सकता है; "\ n" और "\ r \ n" का मिश्रण बहुत आम है। लेकिन/एस मोड (भी एकल लाइन या DOTALL मोड के रूप में जाना जाता है) के साथ, तो आप उस के बारे में चिंता करने की जरूरत नहीं:
'%\{a\}(.+)\{/a\}%s'
हालांकि, वहाँ मूल regex अभी भी इस एक में मौजूद है कि के साथ एक और समस्या है: +
लालची है। इसका मतलब है, यदि पाठ में एक से अधिक {a}...{/a}
अनुक्रम है, तो पहली बार आपके रेगेक्स लागू होने पर यह उन सभी से मेल खाएगा, पहले {a}
से अंतिम {/a}
पर। अंत में
'%\{a\}(.+?)\{/a\}%s'
, मैं क्या '$ के बनाने के लिए पता नहीं है: कि ठीक करने के लिए सबसे आसान तरीका +
ungreedy (उर्फ, "आलसी" या "अनिच्छुक") एक प्रश्न चिह्न जोड़कर बनाना है 'आपके पैटर्न तर्क के उद्घाटन उद्धरण से पहले। मैं PHP नहीं करता, लेकिन यह मेरे लिए एक वाक्यविन्यास त्रुटि की तरह दिखता है। अगर कोई मुझे इस मामले में शिक्षित कर सकता है, तो मैं इसकी सराहना करता हूं।
स्रोत
2009-03-30 06:42:31
बहुत बढ़िया, मुझे पता था कि यह कुछ आसान होगा! – DisgruntledGoat
इसके अलावा, मैंने पाया कि यह जानकारी PHP वेबसाइट पर है, भले ही मुझे इसे देखने से पहले कभी नहीं मिला ... http://www.php.net/manual/en/reference.pcre.pattern.modifiers .php – DisgruntledGoat