HTML belgesinde etiketlerini kaldırmak için PHP düzenli ifade

7 Cevap php

Ben aşağıdaki metni var Say

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

Ben bağlantıyı silmek istiyorum ve (arasında metni tutarken) ben etiketini silmek istiyor. (URL'ler farklı olacak çünkü) nasıl bir düzenli ifade ile bu do

Çok teşekkürler

7 Cevap

Zaman yapabilirsiniz, especially when processing xml düzenli ifadeler kaçının. Bu durumda size dize bağlı olarak, strip_tags() or simplexml kullanabilirsiniz.

Bu, tüm etiketleri kaldırır:

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

Bu sadece <a> etiketlerini kaldırmak olacaktır:

preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $string);
<?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;
}
?>

Bkz PHP Simple DOM Parser.

Güzel ama iş yok değil:

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

strip_tags() da kullanılabilir.

Örneklere bakın here.

Ben bir metin dizesi ile çapa değiştirmek için kullanabilir ...

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);
    }

str_replace kullanabilirsiniz