|
|||
RegEx (PCRE): Schließende Tags ergänzen?
Hallo!
Ich verzweifle im Moment gerade an einem RegEx, der, falls in einem String ein HTML-Tag geöffnet, aber nicht geschlossen ist, den schließenden ergänzt. Beispiel: Code:
Hallo Nun möchte ich ein ergänzen. Ich habe zwei Ansätze versucht: 1. Ich habe mit einer Fallunterscheidung prüfen wollen, ob der öffnende Tag existent ist, der zweite aber nicht: Code:
<?php if (preg_match('%<(em|strong)>%Ui', $string) && !preg_match('%</\1>%Ui', $string)) { $string .= '</\1>'; } ?> 2. Ich wollte mit folgendem Code nach Strings suchen, die öffnende, aber keine schließenden Tags beinhalten, und dann durch den selben String mit einem schließenden Tag am Schluss ersetzen: Code:
<?php preg_replace('%<(em|strong)>(.*)(^</\1>)%Uis', '<\1>\2</\1>', $string); ?> Wäre für jede Hilfe dankbar, ob's jetzt ne Reaparatur von obigem Code ist, oder nochmal ein anderer Ansatz |
Sponsored Links |
|
||||
Zitat:
Zitat:
damit ich dir helfen kann, muß ich genau wissen, wie die bedingungen sind, die vorliegen. pcre ist ne formale sprache, das heißt, wenn du exakt (in normaler sprache) formulieren kannst, was du machen willst, kann man es meisten sehr einfach übersetzen. ansonsten: entweder per assertion oder per rekursiven pattern (ja nach bedingungen). zum testen: http://pcre.nophia.de/evaluate/index.php (ich würd dir ja selbst was aufstellen, hab aber keine zeit - hab durch den ewigen text hier schon ewig zeit verschwendet - eventuell heut abend ... ) was machst du, wenn nur der schließende tag existiert? eigentlich ein interessantes thema, werd mal irgendwann etwas dazu schreiben. achso - je nach situation hilft dir dieser beitrag vielleicht: http://www.php-resource.de/forum/sho...threadid=45908 - vielleicht ists auch overpowered, ka.
__________________
Die Zeit hat ihre Kinder längst gefressen: hund (back in black) | ??? | ??? | ... |
Sponsored Links |
|
|||
erstma ne blöde frage, wie willst du wissen, wo der tag wider geschlossen werden soll?
und zu 1. ich glaub du das da nur n syntaxfehler drin.. dein $treffer fehlt.. http://www.php.net/manual/de/function.preg-match.php Code:
<?php if (preg_match('%<(em|strong)>%Ui', $string, $treffer) && !preg_match('%</'.$treffer[1].'>%Ui', $string)) { $string .= '</'.$treffer[1].'>'; } ?> zu 2. kann ich nix sagen, ich kapier weder dein text noch den code da, sry ^^ __edit: derhund war schneller -.- ^^
__________________
Wer sich über Kritik ärgert, gibt zu, dass sie verdient war. Gaius Cornelius Tacitus (um 55 - nach 115), römischer Historiker und Politiker |
|
||||
@psycho_dmr
deine Lösung klappt, jedoch schließt er dann nur einen Tag. Sind mehr als einer ungeschlossen, bleiben die restlichen halt offen. Da muss man wohl irgendwie mit einer Schleife mehrmals drüber. Muss ich nacher mal schauen. Zitat:
@derHund Zitat:
Zitat:
Zitat:
Der link zu php-resource.de funktioniert leider nicht, da muss ich wohl registriert sein Der punkt ist halt, dass ich mich noch nicht lang mit RegExen beschäftige, bin noch in der lernphase |
|
|||
Sorry für den Doppelpost, aber ich hab das Problem gelöst!
Code:
<?php preg_match_all('%<(strong|em)>%Ui', $string, $treffer); $treffer[1] = array_reverse($treffer[1]); foreach ($treffer[1] AS $sub) { if (preg_match('%<'.$sub.'>%Ui', $string, $subpattern) && !preg_match('%</'.$sub.'>%Ui', $string)) { $string .= '</'.$sub.'>'; } } ?> Habe aber noch über einen anderen ansatz nachgedacht, darstellungsfehler bei nicht geschlossenen Tags zu vermeiden: Man bearbeitet vorher den String mit htmlspecialchars(), und ersetzt dann alle < und > die zu vollständigen Tag-Pärchen gehören, durch < und >. Muss ich aber noch probieren. Vielen dank euch beiden für bei eure hilfe! |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
HTML5 - Schließende Tags weglassen oder beibehalten? | andir | (X)HTML | 9 | 12.11.2010 16:53 |
Regex für Image Tags | uspri | Serveradministration und serverseitige Scripte | 2 | 09.09.2009 09:05 |
Eigene Tags in XHTML 1.1 | x-sharp | (X)HTML | 8 | 03.03.2005 21:53 |