Seite 1 von 1

regular expression frage :-?

Verfasst: 08.09.2008, 12:16
von ins0
Hi ,

ich sitze hier schon viel zulange drann und komme einfach nicht mit einen Regulären Ausdruck weiter :/

Resultat soll sein das der Reg.A. folgende HTML tags vertauscht und zwar nur genau die folgende Zeichenreihenfolge:

Aus:

Code: Alles auswählen

<a href="&#91;* lange url *&#93;">&#91;* 6leerzeichen *&#93;<font face="Arial" style="font-size&#58; 9pt">&#91;* text+leerzeichen *&#93;</font></a>
Vertauschen:

Code: Alles auswählen

<font face="Arial" style="font-size&#58; 9pt"><a href="&#91;* lange url *&#93;">&#91;* text+leerzeichen *&#93;</a></font>
[* blablup *] sind kommentare von mir zum Thread


sprich aus
TAG [a] => TAG [font] => TAG [/font] => TAG [/a]
TAG [font] => TAG [a] => TAG [/a] => TAG [/font]


Ich habe schon ein paar dutzend versuche mit Regex gestartet doch deren ergebnis vertausche auch einfache Links, die der "Genauen" Zeichenreihenfolge, die eigentlich ersetzt werden soll, nicht entsprach :/

hoffe mir kann jemand einen Regulären Ausdruck erstellen oder vielleicht sogar erklären wie ich das hinbekomme :)

Ich hatte preg_replace verwendet.

mfg ins0[/u]

Verfasst:
von

Verfasst: 08.09.2008, 20:41
von Ubunty
Ich würde es in mehreren Schritten versuchen:

Versuch mal das hier:

$a = '<a href="[* lange url *]">[* 6leerzeichen *]<font face="Arial" style="font-size: 9pt">[* text+leerzeichen *]</font></a>';
$a =~ s/<a href=(.+?)>//is;
$url = $1;
$a =~s/>(.+?)<//is;
$text = $1;
$b = '<font face="Arial" style="font-size: 9pt"><a href="'.$url.'">'.$text.'</a></font>';

Re: regular expression frage :-?

Verfasst: 08.09.2008, 21:02
von Mork vom Ork
ins0 hat geschrieben:Ich habe schon ein paar dutzend versuche mit Regex gestartet doch deren ergebnis vertausche auch einfache Links, die der "Genauen" Zeichenreihenfolge, die eigentlich ersetzt werden soll, nicht entsprach :/
Du meinst, dein Muster passt auch auf die falschen Textstellen? Dann hast du möglicherweise das Pferd vom falschen Ende aufgezäumt, d.h. anstatt mit einem genauen Muster anzufangen (vielleicht sogar ohne Platzhalter) hast du versucht, ein Allerweltsmuster zu spezifizieren (sowas wie <a.*</a>).

Der nachfolgende Javascript-Schnippsel trifft zumindest deine Vorgabe und filtert die nötigen Teile raus:

Code: Alles auswählen

var q = 'bla<a href="url">      <font face="Arial" style="font-size&#58; 9pt">&#91;* text+leerzeichen *&#93;</font></a>fasel<a href="schnurz">furz</a>';
alert&#40;q.match&#40;/&#40;<a href="&#91;^"&#93;+">&#41; &#123;6&#125;&#40;<font face="Arial" style="font-size&#58; 9pt">&#41;&#40;.+?&#41;<\/font><\/a>/i&#41;&#41;;
Die Umsetzung in PHP sollte nicht allzu schwierig sein, das Muster bleibt ja.

Du könntest natürlich bei der Gelegenheit das restlos überflüssige <font>-Element gleich rauswerfen - auch <a> kennt das style-Attribut, dazu musst du nicht <font> bemühen.

Verfasst:
von

Re: regular expression frage :-?

Verfasst: 09.09.2008, 08:28
von ins0
Danke @ Ubunty und Mork vom Ork

Der Regex von Mork passt super =)
Ja das hast du mich erwischt mit meinen "Alleweltmuster" :D
Mork vom Ork hat geschrieben: Du könntest natürlich bei der Gelegenheit das restlos überflüssige <font>-Element gleich rauswerfen - auch <a> kennt das style-Attribut, dazu musst du nicht <font> bemühen.


Ne ich Archiviere gerade eine Tabellarische-Statische-Datenbank die nur in HTML erstellt worden ist und da ka muss ich probieren eine Symmetrie herzustellen =) am liebsten währ mir natürlich auch das alles schön gleichmäßig ist aber bei 6142 HTML dokumenten is das leider sehr unwarscheinlich :roll:

Werde mich danach nochmal genauer mit Regex befassen :)

Danke nochmal ihr beide :)
mfg ins0