2009-09-01 10 views
6

मैं निम्न पाठपीएचपी नियमित अभिव्यक्ति HTML दस्तावेज़ में टैग हटाना

..(content)............. 
<A HREF="http://foo.com/content" >blah blah blah </A> 
...(continue content)... 

मैं लिंक हटाना चाहते हैं और मैं (जबकि बीच में पाठ रखने) टैग हटाना चाहते हैं। मैं एक नियमित अभिव्यक्ति (यूआरएल के बाद से सभी अलग होगा) के साथ ऐसा कैसे करते

बहुत धन्यवाद

+0

संभव डुप्लिकेट [आप कारण है कि यह एक regex के साथ XML और HTML पार्स करने के लिए कठिन है के कुछ उदाहरण दे सकते हैं?] (Http://stackoverflow.com/questions/701166/can-you-provide-some -examples-of-why-it-hard-to-parse-xml-and-html-with-a-rege) –

+0

संभावित डुप्लिकेट [XHTML स्वयं निहित टैग को छोड़कर RegEx मिलान खुले टैग] (http: // stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

उत्तर

16

बचें नियमित अभिव्यक्ति जब भी आप कर सकते हैं, especially when processing xml। इस मामले में आप अपनी स्ट्रिंग के आधार पर strip_tags() या simplexml का उपयोग कर सकते हैं।

-2

उपयोग str_replace

+0

वह विभिन्न href तारों के साथ ऐसा कैसे करना चाहिए? – Rufinus

+0

(मैं डाउनवॉटर नहीं हूं, लेकिन ऐसा लगता है कि वह यह नहीं समझाएगा कि वह क्यों कम हो गया है, जो सहायक नहीं है, क्या मैं जोड़ सकता हूं, मान लीजिए क्यों ...) str_replace के साथ, आप "पैटर्न" निर्दिष्ट नहीं कर सकते हैं, जो एक समस्या है, क्योंकि यूआरएल बदल सकता है; और यहां तक ​​कि अगर यह नहीं बदला गया है, तो आपको str_replace पर दो कॉल का उपयोग करना होगा: एक ओपनिग टैग के लिए, और एक बंद करने के लिए, जैसा कि आप रखना चाहते हैं। –

3

सुंदर नहीं है, लेकिन काम करता है:

$data = str_replace('</a>', '', $data); 
$data = preg_replace('/<a[^>]+href[^>]+>/', '', $data); 
+0

HTML_ अच्छी तरह से गठित होने पर स्ट्रिप_टैग अच्छी तरह से काम करता है। मुझे एक HTML फ़ाइल में समस्या थी जहां गुण उद्धरण गायब थे, और यह दृष्टिकोण काम करता था। धन्यवाद! – FrancescoR

13

हो जाएगा ताकि सभी टैग हटाएं:

preg_replace("/<.*?>/", "", $string); 

यह केवलको हटा देगाटैग:

preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $string); 
+0

क्या यह हर टैग को मिटा नहीं देगा? –

+2

ऐसा नहीं है कि किससे पूछा गया था? – nickf

+0

सही! प्रत्यक्ष और सख्त। – tfont

4
<?php 
//example to extract the innerText from all anchors in a string 
include('simple_html_dom.php'); 

$html = str_get_html('<A HREF="http://foo.com/content" >blah blah blah </A><A HREF="http://foo.com/content" >blah blah blah </A>'); 

//print the text of each anchor  
foreach($html->find('a') as $e) { 
    echo $e->innerText; 
} 
?> 

PHP Simple DOM Parser देखें।

0

मैं इस का उपयोग किसी पाठ स्ट्रिंग के साथ एंकर को बदलने के लिए ...

function replaceAnchorsWithText($data) { 
     $regex = '/(<a\s*'; // Start of anchor tag 
     $regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist 
     $regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link 
     $regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag 
     $regex .= '(?P<name>\S+)'; // Grab the name 
     $regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive) 

     if (is_array($data)) { 
      // This is what will replace the link (modify to you liking) 
      $data = "{$data['name']}({$data['link']})"; 
     } 
     return preg_replace_callback($regex, array('self', 'replaceAnchorsWithText'), $data); 
    } 
+0

या आप [यह] (http://stackoverflow.com/a/758820/1057527) कर सकते हैं ... – machineaddict

1

strip_tags() भी इस्तेमाल किया जा सकता है।

उदाहरण देखें here

+1

स्टैक ओवरफ़्लो में आपका स्वागत है! हालांकि यह सवाल का जवाब दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। – senderle

+0

@sendle, मैं आम तौर पर आपके साथ सहमत हूं लेकिन इस बार यह "कोई भी" बाहरी पृष्ठ नहीं है, यह PHP.net का आधिकारिक पृष्ठ है जो 'strip_tag' फ़ंक्शन का वर्णन करता है और यहां कोड नमूने कॉपी करना जरूरी नहीं है;) इस उत्तर में पहले से ही फ़ंक्शन का नाम है और इसका लिंक संदर्भ। – Wh1T3h4Ck5

0
$pattern = '/href="([^"]*)"/'; 
की