2012-10-01 18 views
18

मैं एक LongText कॉलम में यह डेटा है (इसलिए पंक्ति विराम बनाए रखा जाता है):पीएचपी preg_match अतीत लाइन मिलान नहीं टूट जाता है

Paragraph one 
Paragraph two 
Paragraph three 
Paragraph four 

मैं 3. मैं के माध्यम से अनुच्छेद 1 मैच के लिए कोशिश कर रहा हूँ मैं इस कोड का उपयोग कर रहा हूं:

preg_match('/Para(.*)three/', $row['file'], $m); 

यह कुछ भी नहीं देता है।

preg_match('/Para(.*)one/', $row['file'], $m); 

तो कोड काम करता है और मैं उचित स्ट्रिंग लौटे मिल: अगर मैं सिर्फ पैरा की पहली पंक्ति के भीतर काम करने, मेल द्वारा की कोशिश करो। मुझसे यहां क्या गलत हो रहा है?

उत्तर

42

उपयोग s संशोधक।

preg_match('/Para(.*)three/s', $row['file'], $m); 

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

+0

चेतावनी: '/ s' संशोधक लालची है। यदि पाठ में एक से अधिक 'तीन' हैं, तो मैच में अंतिम घटना तक सभी पाठ शामिल होंगे। इसे रोकने के लिए '/ sU' का उपयोग करें (ऊपरी केस यू को नोट करें)। –

+1

@ फ्रैंकफ़ोर्ट वास्तव में एक संशोधक मुद्दा नहीं है: '*' पुनरावृत्ति प्रति लालची है। एक बेहतर तरीका यह है कि इसे आलसी बनाने के लिए एक प्रश्न चिह्न डालना है: '/ पैरा (। *?) तीन/एस'। इसके अलावा, '/ यू' संशोधक लालची को रद्द नहीं करता है, लेकिन इसे उलटा करता है: '*' आलसी हो जाता है और '*? लालची बन जाता है। ओपी कोड पर कोई समस्या नहीं है, लेकिन यह एक जटिल जटिल अभिव्यक्ति में अजीब त्रुटियों को ट्रिगर कर सकती है। –

10

multi-line modifier जोड़ें।

उदाहरण के लिए:

preg_match('/Para(.*)three/m', $row['file'], $m) 
+8

किसी के लिए अंतर के बारे में सोच रहा इस और स्वीकृत उत्तर ('s' संशोधक) के बीच,' s' संशोधक '।' न्यूलाइन के साथ-साथ अन्य सभी पात्रों को भी बनाता है (डिफ़ॉल्ट रूप से यह उन्हें छोड़ देता है), जबकि 'm' ​​नियंत्रण करता है कि कैसे'^'और' $ 'मैच; उन्हें प्रत्येक स्ट्रिंग की शुरुआत और अंत के विपरीत पूरी स्ट्रिंग की शुरुआत और अंत से मिलान करने के लिए मजबूर करना पड़ता है (लगभग - 'डी' भी देखें)। – Dave

4

regex की स्थापना डॉट-सभी के लिए (अतिरिक्त 'एस' अंत में पैरामीटर) की कोशिश करो, तो यह लाइन टूट जाता है में शामिल हैं:

preg_match('/Para(.*)three/s', $row['file'], $m); 
+0

हे। @tassoeven मुझे इसे हराया! जीत के लिए – guiniveretoo

+0

एस संशोधक – JoshHighland