2013-01-12 24 views
20

मुझे कुछ वर्णों के बीच में व्हाइटस्पेस को अनदेखा करने का प्रयास करने में समस्या आ रही है। मैं कुछ दिनों के लिए चारों ओर घूम रहा हूं और समाधान ढूंढ नहीं पाया।वैकल्पिक व्हाइटस्पेस रेगेक्स

यहाँ मेरी कोड है:

// Get Image data 
preg_match('#<a href="(.*?)" title="(.*?)"><img alt="(.*?)" src="(.*?)"[\s*]width="150"[\s*]height="(.*?)"></a>#', $data, $imagematch); 
$image = $imagematch[4]; 

मूल रूप से इन परिदृश्यों में से कुछ हैं मेरे पास है:

<a href="/wiki/File:Sky1.png" title="File:Sky1.png"><img alt="Sky1.png" src="http://media-mcw.cursecdn.com/thumb/5/56/Sky1.png/150px-Sky1.png"width="150" height="84"></a> 

(सूचना चौड़ाई के बीच एक स्थान की कमी = "" और src = "")

और

<a href="/wiki/File:TallGrass.gif" title="File:TallGrass.gif"><img alt="TallGrass.gif" src="http://media-mcw.cursecdn.com/3/34/TallGrass.gif" width="150"height="150"></a> 

(चौड़ाई = "" और ऊंचाई = "" के बीच एक स्थान की कमी पर ध्यान दें।)

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

उत्तर

68

यदि कोई स्थान अनुमति दी जा सकती है तो \s? जोड़ें।

\ रों सफेद स्थान

के लिए खड़ा? का कहना है कि पिछले चरित्र एक बार हो सकता है या नहीं हो सकता है।

यदि एक से अधिक रिक्त स्थान की अनुमति है और वैकल्पिक है, तो \s* का उपयोग करें।

* कहते पूर्ववर्ती चरित्र शून्य या अधिक बार हो सकता है।

'#<a href\s?="(.*?)" title\s?="(.*?)"><img alt\s?="(.*?)" src\s?="(.*?)"[\s*]width\s?="150"[\s*]height\s?="(.*?)"></a>#' 

विशेषता नाम और = के बीच अतिरिक्त स्थान की अनुमति देता है।

यदि आप = के बाद भी एक वैकल्पिक स्थान चाहते हैं, तो इसके बाद \s? भी जोड़ें।

इसी तरह, भी आप वैकल्पिक वर्ण है, तो आप ? उपयोग कर सकते हैं अधिकतम घटना या * है अगर अधिकतम घटना असीमित है, वैकल्पिक चरित्र निम्नलिखित।

और अपने वास्तविक समस्या [\s*] जो एक खाली स्थान के या एक * के रूप में वर्ण [ और ] में संलग्न एक चरित्र वर्ग है की घटना का कारण बनता है था। एक चरित्र वर्ग एक बार अपने सदस्यों में से किसी एक की घटना की अनुमति देता है (इसलिए * इसे हटाएं) और यदि आप ] के बाद क्वांटिफ़ायर (?, +, * इत्यादि) को जोड़ते हैं तो चरित्र वर्ग में कोई भी वर्ण क्वांटिफ़ायर के अनुसार हो सकता है ।

+0

धन्यवाद! मैंने [\ s *] को बदल दिया है? और यह अब काम करता है! :) धन्यवाद! – jameslfc19

+0

@ jameslfc19 's? 'का अर्थ है 0 या 1 व्हाइटस्पेस वर्ण। हालांकि, अगर 1 से अधिक व्हाइटस्पेस वर्ण हैं तो क्या होगा? आप '\ s *' चाहते हैं तो यह 0 या ** अधिक ** से मेल खाएगा। बीटीडब्ल्यू आप एचटीएमएल पार्स करने के लिए regex का उपयोग नहीं करना चाहते हैं। आप इनमें से एक [इन] (http://stackoverflow.com/q/3577641/1592648) विधियों का उपयोग करना चाहते हैं। –