2010-02-10 15 views
14

से मेल खाता है मुझे यकीन है कि यह मामूली बात है, लेकिन मैं एक regex कि ध्यान में रखा जाता है कि इस विषय को कई पंक्तियों के होते हैं बनाने में असमर्थ हूँ। "m" एक के लिए संशोधक काम नहीं कर रहा है। आप 's' संशोधक कोशिशphp preg_replace regex कि कई पंक्तियों

+0

क्या आप सकारात्मक हैं रेगेक्स सही है? – Romain

+0

उपयोग MSU विस्तार के लिए http://zendf.wordpress.com/2012/02/08/php-preg_match-multi-line-match/ – Tofeeq

उत्तर

7

किया? मतलब 'एक लाइन के रूप में व्यवहार करें। 'एम'^और $ लाइन की शुरुआत और अंत का उपयोग करने के लिए सक्षम बनाता है।

+0

आह आईसी नीचे दिए गए लिंक को पढ़ने, कल कि @work की कोशिश करेंगे। एक और सवाल हालांकि, मैं न्यूलाइन, रिक्त स्थान या टैब से कैसे मेल करूं? अब तक मैं "[\\ n \\ t] *" के साथ आया हूं, यह सही है? –

+0

बस '\ s' का उपयोग करें, जिसका अर्थ है किसी भी स्पेस कैरेक्टर। –

+0

\ s मैचों 'व्हाइट स्पेस' (अर्थात् \ t और space) और मेरा मानना ​​है कि इसमें \ n के साथ-साथ उपयोग किए जाने पर भी शामिल हो सकता है। – ziya

45

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

पहले, डिफ़ॉल्ट रूप से . मेटा चरित्र पंक्ति विराम मेल नहीं खाता। PHP के स्वाद सहित कई रेगेक्स कार्यान्वयन के लिए यह सच है। जिसके अनुसार, पाठ ले:

$text = "Line 1\nLine 2\nLine 3"; 

और regex

'/.*/' 

तो regex केवल Line 1 से मेल खाएगी। खुद के लिए देखें:

preg_match('/.*/', $text, $match); 
echo $match[0]; // echos: 'Line 1' 

.* के बाद से \n (नई लाइन वर्ण) पर "मिलान बंद हो जाता है"।

preg_match('/.*/s', $text, $match); 
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3' 

अब एम-संशोधक (बहु लाइन) के बारे में: आप इसे से मेल पंक्ति के रूप में अच्छी तरह से टूट जाता है, अपने regex के अंत में एस संशोधक (उर्फ डॉट-सभी संशोधक) से संलग्न देना चाहते हैं: जो ^ न केवल इनपुट स्ट्रिंग की शुरुआत से मेल खाता है, बल्कि प्रत्येक पंक्ति की शुरुआत भी करेगा। $ के साथ ही: यह $ न केवल इनपुट स्ट्रिंग के अंत से मेल खाता है, बल्कि प्रत्येक पंक्ति का अंत भी देगा।

एक उदाहरण:

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/', $text, $matches); 
print_r($matches); 

जो केवल 3 (इनपुट के अंत में) से मेल खाएगी। लेकिन:

लेकिन एम-संशोधक सक्षम करने से:

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/m', $text, $matches); 
print_r($matches); 

सब (एकल) अंक प्रत्येक पंक्ति के अंत में ('1', '2' और '3') मिलान किया जाता है।

+3

+1 शानदार जवाब – blak3r