2009-07-11 16 views
6

मेरे पास एक div id है जो एक आउटपुट से निकालना है जोमैं RegEx का उपयोग कर एक HTML तत्व और इसकी सामग्री को कैसे हटा सकता हूं

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div> 

जैसा दिखता है मैं PHP और regex का उपयोग करके इस div और सबकुछ को कैसे हटा सकता हूं?

धन्यवाद।

+0

क्या आप आगे विस्तार कर सकते हैं? क्या यह एक स्ट्रिंग के रूप में है? –

+1

क्या आप आईडी नाम और/या कक्षा का नाम जानते हैं? या क्या आईडी और/या कक्षा के कोई विशिष्ट पहचानकर्ता हैं ताकि आप उस विवरण में गिरने वाले सभी divs को हटा न सकें? या आप सभी divs और उनकी सामग्री को हटाना चाहते हैं? –

उत्तर

13

सरल उत्तर यह है कि आप नहीं करते हैं। आप इसके बजाय PHP के कई HTML पार्सर्स का उपयोग करते हैं। Regexes HTML में हेरफेर करने का एक flaky और त्रुटि प्रवण तरीका हैं।

कहा जा रहा है कि आप यह कर सकते हैं:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html); 

लेकिन कई बातें इस के साथ गलत कर सकते हैं।

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div> 

आप के साथ खत्म हो जाएगा:

other elements etc..) </div> 
regex पहले </div> पर बंद हो जाएगा के रूप में

उदाहरण के लिए, अगर है कि एक div में शामिल है। और इस समस्या को हल करने के लिए आप वास्तव में कुछ भी नहीं कर सकते (नियमित अभिव्यक्तियों के साथ)।

एक पार्सर इसे और अधिक इस तरह दिखता है के साथ हो गया:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$element = $doc->getElementById('ithis'); 
$element->parentNode->removeChild($element); 
$html = $doc->saveHTML(); 
+0

+1। यह टिप्पणी करने लायक है कि (ए) यदि तत्व मौजूद नहीं है, तो '$ element'' NULL' है और '-> removeChild()' आदेश घातक त्रुटि के साथ विफल हो जाएगा, और (बी) आप चाहें विकृत HTML के बारे में किसी भी नोटिस को चुप करने के लिए '-' लोड HTML() 'के कारण' @ 'का उपयोग करने के लिए:' @ $ doc-> loadHTML ($ html); ' –

1

मैं PHP के बारे में पता नहीं है, लेकिन आप कुछ भी नहीं के साथ /<id.*?<\/id[^>]*>/ बदल सकते हैं।

0

PHP सर्वर पक्ष है, और आउटपुट सर्वर से आ रहा है। क्या आप इसे आउटपुट नहीं कर सकते? या आप इसे छिपाने की कोशिश कर रहे हैं? यदि ऐसा है, तो स्टाइलशीट में, बस #ithis {display:none} कहें।

यदि स्ट्रिंग PHP में कुछ फ़ंक्शन से वापसी है जिसे आपने लिखा नहीं है और आप उस कोड के साथ मक नहीं करना चाहते हैं, तो आपको नेस्टेड div के खाते में एक बहुत मुश्किल रेगेक्स लिखना होगा, अलग-अलग वाक्यविन्यास आउटपुट, आदि। मैं आपकी सहायता के लिए कुछ पार्सर (शायद यह Zend Framework component) का उपयोग करने की सलाह दूंगा। मैंने इसे कुछ इसी तरह के लिए इस्तेमाल किया है। यद्यपि यदि आप ज़ेडएफ से परिचित नहीं हैं, तो आप कुछ और कोशिश कर सकते हैं।

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

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