[PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags
Hallo Liebe Community!
Folgende Situation. Ich möchte in einem PHP-Script einen HTML Text, bzw. bestimmte Begriffe, mit Acronymtags versehen. Derzeitig tue ich das in einer Schleife.
Bsp.:
while begriffcount < max
suche & ersetze current_begriff mit <acronym title="current_beschreibung">current_begriff</acronym>
Die Beschreibung ist zu diesem Zeitpunkt bereits escaped, es kann also nicht passieren das das title-Attribut, durch nicht escapte quotes, geschlossen werden kann.
Mein Problem hierbei ist nun, dass wenn innerhalb der Beschreibung ein Begriff auftaucht, durch einfaches str_replace ein acronym im acronym ensteht.
Bsp.: <acronym title="<acronym title="....
Mein angedachter Lösungsansatz wäre nun ein preg_replace zu verwenden welcher das ersetzten innerhalb von acronym-Attributen und dem acronym-Content selbst untersagt und alles weitere ersetzt.
Leider bin ich in Sachen reguläre Ausdrücke kein Stück bewandert und habe auch im Internet nur Teillösungen gefunden die mir nicht weiter geholfen haben. Ich möchte auch keine HTML-Parser und/oder diverse Frameworks verwenden.
Kann mir eventuell jemand einen Denkanschub geben oder vllt sogar ein brauchbares Pattern basteln?
AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags
Zitat:
Zitat von Mother-Brain
vllt. ne einfache if Abfrage, ob das current_beschreibung zu einem "<acronym title=" werden würde?
So gut sind meine PHP Kentnisse leider auch nicht mehr, aber vllt. ist es ja nen Ansatz
Hallo Mother Brain, danke für deine Antwort. Die Idee ist garnicht mal so schlecht. Allerdings müsste ich dann, (korrigiere mich wenn ich mich irre), eine verschachtelte Schleife bauen die bei jedem generieren eines Tags erneut schauen muss die Beschreibung, Begriffe aus der Liste enthält. Das würde unter Umständen ziemlich lange dauern da die Liste ziemlich groß ist und stetig wächst.
Ich habe mir derzeitig eine Notlösung gebaut. Ist zwar nicht die feine englische Art aber funktioniert. (Falls es wen interessieren sollte)
PHP-Code:
function fillWithAcronyms($all,$begriff,$besch,$pos=0){
$pos_begriff = stripos($all, $begriff,$pos);
AW: [PHP] Reguläre Ausdrücke - Replace nur außerhalb von Acronym-Tags
Auch wenn die Frage schon etwas älter ist, so ist der Sachverhalt doch ziemlich interessant.
Ich hätte auf Anhieb einen Ansatz, der nicht auf einem komplexen regulären Ausdruck basiert:
- du könntest den Text nach den vorhandenen Akronymen durchsuchen und in einen Array schreiben, wenn dies geschehen ist, ersetzt du nur noch die gefundenen Akronyme des Arrays im Text (so verhinderst du das durch ein ersetzen mit den neuen Beschreibungstexten neue Akronyme hinzukommen, da bereits dein Array mit den zu ersetzenden Akronymen besteht und keine weiteren hinzukommen können).