2010-12-30 7 views
1

Ich bin für die Code-Suche folgenden zu analysieren:Passende zwei Abschnitte gleich oft

einig Texttext

ich unnötigen <span> Vorkommen entfernen müssen, so dass der Ausgang ist:

einige Texttexte

schrieb ich einen regulären Ausdruck, die einmal tut:

/[^ <] * </SPAN>/i

Wie mache ich das gleiche Male sowohl <span> als auch </span>?

+5

Zum n-ten Mal: ​​Regex ist nicht zum Parsen von HTML! – progo

+0

Ich glaube nicht, dass es mit regulären Ausdrücken gemacht werden kann, ich denke die Grammatik ist zumindest kontextfrei. –

+0

@PROGO: Mehr wie "zum n^1000sten Mal" ... – Tomalak

Antwort

0
$result = preg_replace(
    '%(?<=<span>)  # Assert that there is a directly preceding span tag 
    <span>    # Match a span tag 
    ((?:(?!</?span>).)*) # Match the contents of the tag only if they do not include another span tag 
    </span>    # Match a closing span tag 
    (?=</span>)   # Assert that there is a directly following span tag 
    %six', 
    '\1', $subject); 

auf Ihrem Beispiel arbeiten, aber es hat zweimal angewandt werden, weil es eine „Schicht“ von verschachtelten span Tags pro Iteration entfernt.

Also, mit beliebig verschachtelten Tags, müssten Sie dies einmal für jede Verschachtelungsebene aufrufen.

+0

Nun, das sieht nach der Antwort aus, die ich brauche. Allerdings bekomme ich Verbindung abgebrochen Fehler beim Testen dieser (ich nur hinzugefügt/i Modifier, keine anderen Änderungen). – Leszczu

+0

Hm, keine Ahnung was dieser Fehler bedeutet. Sie haben gemerkt, dass in diesem Regex die Trennzeichen '%' sind, nicht '/' Zeichen. Wenn Sie also ein '/ i' hinzufügen, führen Sie einen Fehler ein? Ich habe jetzt meine Regex geändert, um die Groß- und Kleinschreibung zu ignorieren. –

+0

Das ist es, danke. Sieht so aus, als ob es meinen Windows-Server kaputt macht, funktioniert aber unter Linux und in Windows-CLI. – Leszczu

0

Sie könnten versuchen, zu sehen, ob ein <span> direkt von einer anderen <span>und seine folgt </span> passend direkt von einer anderen </span> vorangestellt wird.

Aber Sie können nicht wirklich sagen, dass dieser Bereich nutzlos sein wird, weil Markup diesen spezifischen Spannen hinzugefügt werden kann. Wenn kein Markup vorhanden ist, sind die letzten verbleibenden Abschnitte ebenfalls nutzlos und können genauso gut entfernt werden.