Anschinsan: Regular Expression fehlerhaft

Bitte erlöst mich von meinem Elend!

Ich möchte per 'preg_replace' alle Styleangaben aus einem html Text entfernen. Mein erfolgreichster Suchpattern dazu sieht so aus:

$suche[2] = '@style='(.*)'@i';

Das entfernt alle Styleangaben die nur eine Zeile benötigen - aber wenn ein Zeilenumbruch drin ist schaut's schlecht aus (html kommt von Word).

Im Laufe des stundenlangen Debuggens und fleissiger Weiterbildung habe ich alle möglichen Varianten ausprobiert:
im,is und ims hinter dem zweiten Delimiter @
$ vor dem letzten '
Eckige und runde Klammern an jeder Position
\r\n  schon vorher ersetzen bzw. in das Patten einbauen
...

Als Ergebnis bleiben die Styleangaben entweder im Quelltext oder die preg_replace Funktion ersetzt auch über das abschließende ' hinaus weiter.

Hiermal ein Beispieltext, in dem ersetzt werden soll:

<p class=MsoNormal align=center style='text-align:center;background:white'><b><span
lang=TR style='font-size:12.0pt;font-family:Verdana;color:black;letter-spacing:
.65pt;mso-ansi-language:TR'>TOBİT' İN KİTABI<br
style='mso-special-character:line-break'>
<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'>
<![endif]></span></b><span lang=TR style='mso-ansi-language:TR'><o:p></o:p></span></p>

Bitte, bitte - kann mir jemand mit dem Suchpattern helfen bevor der Feiertag endgültig vorbei ist?

Anschinsan

  1. $suche[2] = '@style='(.*)'@i';

    Du vergißt an dieser Stelle, dass der Stern 'gierig' ist, also grundsätzlich so viele Zeichen vie möglich matcht.

    Du möchtest aber alle Zeichen bis auf das Hochkomma matchen, brauchst also eine verneinende Zeichenklasse.

    Alles was Du wissen möchtest, findest Du im Abschnitt Suchmuster-Modifikatoren des Kapitels PCRE im PHP-Manual.

    Die Lösung lautet in diesem Fall:
    $suche[2] = "/style=('[^']*'|\"[^\"]*\")/i";
    So werden auch style-attribute "gematcht" (furchtbar, ich weiß!), deren Wert in doppelten Hochkommata steht.

    schönen Gruß, David

    1. Einfach genial!

      Ich danke dir aus tiefstem Herzen - dein Suchpattern funktioniert wunderbar und, wenn ich ihn so betrachte, ist er auch total nachvollziehbar, logisch und verständlich ;)

      Ich hab mir zwar schon alle möglichen Anleitungen durchgelesen - meinen Pattern sogar auf diversen empfohlen Tools getestet - aber ich bin wohl noch weit davon entfernt das Thema 'Regular Expressions' wirklich zu verstehen.

      Übung macht den Meister - aber dank deinem Pattern kann ich heute doch noch entspannt ins Kino gehen. Danke auch dafür!