2010-12-11 6 views
2

Ich brauche eine sehr kleine Hilfe, um den Inhalt innerhalb bestimmter und Tags zu finden.Finden Sie den Text innerhalb <a> und</a> Tags

Beispiel:

$string = '<a href="dummyurl">TEXT</a><span>Other Text</span>'; 

Ich mag würde 'TEXT' zu finden und es mit einem anderen Wert zu ersetzen. Offensichtlich wird der Inhalt von 'href' und 'TEXT' dynamisch generiert.

+1

Handelt es sich nur um HTML-Snippets oder ganze HTML-Dokumente? –

+0

* (verwandt) * [Beste Methoden, HTML zu analysieren] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

Antwort

2
+1

Als eine übliche Regel ist es besser zu zeigen Sie den tatsächlichen Code, auch wenn Sie einen Link als Beispiel verwenden, so ist die Antwort in sich abgeschlossen. Offensichtlich die Quelle zuordnen. Außerdem ist diese Regexp ein wenig schwach, da bei gieriger Übereinstimmung Probleme auf einer Seite mit mehreren Ankern auftreten können. – Orbling

+0

In der Tat keine Verwendung bei der Definition der gesamten Start-Tag (und praktisch unmöglich). Es ist jedoch keine perfekte Antwort, da das letzte Tag vor ein End-Tag sein könnte (zB). – Rudie

+0

Kam mit der gleichen Antwort, aber löschte es basierend auf der Eingabe hier. Muss eine bessere Regex sein, um damit umzugehen. – bowsersenior

2

Wenn Sie sicher sind, dass es keine > Charakter in dem Start-Tag (mit Ausnahme der offensichtlichen 1):

preg_match('/<a[^>]*>(.*?)<\/a>/i', $string, $matches); 
2
$doc = new DOMDocument; 
$doc->loadHTML('<a href="dummyurl">TEXT</a><span>Other Text</span>'); 
$anchors = $doc->getElementsByTagName('a'); 
$len = $anchors->length; 
for($i = 0; $i < $len; $i++) { 
    if($anchors->item($i)->nodeValue == 'foo') { 
     $anchors->item($i)->nodeValue = 'New Value'; 
     $anchors->item($i)->setAttribute('href', 'new href'); 
    } 
} 
$newHTML = $doc->saveHTML(); 
echo $newHTML; 

http://php.net/manual/en/class.domdocument.php

+0

Wer spricht über DOM? Er hat eine string $ string, kein DOM. – Rudie

+0

... und diese Zeichenfolge kann verwendet werden, um eine "Mikrodom" zu erstellen, aus der Attribute leicht aus Elementen extrahiert und geändert werden können, oder was auch immer. – karim79

0

Lernen Sie sich das DOM, mit dem Sie sowohl mit HTML- als auch mit XML-Dokumenten arbeiten und Fragen wie diese allgemein beantworten können. Es gibt eine Lernkurve, die langsamer sein wird als fein abgestimmte lokale Regexes, aber sie wird robuster und für fast alles, was ein HTML- oder XML-Dokument ist, anwendbar sein.

PHP hat einen ganzen großen Abschnitt über die Verwendung des DOM in PHP within the manual.

+1

Wer spricht über DOM? Er hat eine string $ string, kein DOM. – Rudie

+0

tatsächlichen Code hätte dazu beigetragen, Verwirrung zu vermeiden; aber der Link ist PHP info – zanlok

Verwandte Themen