preg_replace div mit inhalt

Benjamin Rauer

Mitglied
Ich weiß ich nerve, habe dennoch eine Frage, dieser Teil aalb-B071GNJ4HC-B07NW5FXTK-B07Q3916WT-B07ZS7LC5H-B071X8P8F2-DE der div id ändert sich ständig. Mit welchen Regex suche ich die Div nach --ProductCarousel und ignoriere den teil davor?
 

Yaslaw

alter Rempler
Moderator
Schöner wäre sowas.
PHP:
    //DOMDocument laden
    $doc = new DOMDocument;
    $doc->load('test.html');
    //XQuery zusammenstelln
    $xquery = "div[contains(@id, '--ProductCarousel')]";
    //XQuery Parser erstellen
    $p = new DOMXPath($doc);
    //XQuery anwenden und erster Treffer auslesen
    $nodes = $p->query($xquery);
    $node = $nodes->item(0);
    //Treffer löschen
    $node->parentNode->removeChild($node);
    //Resultat ausgeben
    $newHtml = $doc->saveXML();
    echo $newHtml;
    //$doc->save('test.html');

Oder kürzer mit SimpleXml (ich finde die obere Lösung sauberer)
PHP:
    $xquery = "div[contains(@id, '--ProductCarousel')]";
    $html = file_get_contents('test.html');
    $xml = new SimpleXMLElement($html);
    unset($xml->xpath($xquery)[0][0]);    
    echo $xml->asXML();
 
Zuletzt bearbeitet:

Benjamin Rauer

Mitglied
Schöner wäre sowas.
PHP:
    //DOMDocument laden
    $doc = new DOMDocument;
    $doc->load('test.html');
    //XQuery zusammenstelln
    $xquery = "div[contains(@id, '--ProductCarousel')]";
    //XQuery Parser erstellen
    $p = new DOMXPath($doc);
    //XQuery anwenden und erster Treffer auslesen
    $nodes = $p->query($xquery);
    $node = $nodes->item(0);
    //Treffer löschen
    $node->parentNode->removeChild($node);
    //Resultat ausgeben
    $newHtml = $doc->saveXML();
    echo $newHtml;
    //$doc->save('test.html');
Das ist definitiv die bessere Lösung

Eine Sache hätte ich allerdings noch :rolleyes:

und Zwar wird am ende vom Text dank Wordpress-Plugin, ein Footer angezeigt welches ich noch loschen möchte:

1.
Code:
<p>Der Beitrag <a rel="nofollow" href="link">title</a> erschien auf <a rel="nofollow" href="Webseite.de"">Webseite</a>.</p>

Und in manchen feeds ist noch:

2.
Code:
<p><strong>Kennst du schon unsere App?</strong>Sie ist kostenlos für alle<a href="https://play.google.com/store/apps/details?id=com.news.android" target="_blank" rel="noopener"><strong>Android</strong></a> und <a href="https://itunes.apple.com/de/app/charbel-de/id126691363?mt=8" target="_blank" rel="noopener"><strong>iOS</strong></a> Geräte verfügbar!</p>


Bei 1. habe ich es mit:
Code:
preg_replace('/<p>Der Beitrag <a\s+.*?href=".*?"\s+.*?>.*?<\/a> erschien auf <a\s+.*?href=".*?"\s+.*?>.*?<\/a>.</p>/i', '', $text);

versucht, zerhaut mir aber den kompletten feed.

Bei 2. dachte ich mir ich mach es wie folgt:
Code:
$text = str_ireplace('<p><strong>Kennst du schon unsere App?</strong>Sie ist kostenlos für alle<a href="https://play.google.com/store/apps/details?id=com.news.android" target="_blank" rel="noopener"><strong>Android</strong></a> und <a href="https://itunes.apple.com/de/app/charbel-de/id126691363?mt=8" target="_blank" rel="noopener"><strong>iOS</strong></a> Geräte verfügbar!</p>', '', $text);

doch leider klappt das auch nicht.

hoffe für beides gibt es ein preg_replace
 
Zuletzt bearbeitet von einem Moderator: