selfhtml.de - Alles für den Webmaster!

 

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Regex zwei gleiche Tags trennen

Autor: gp812
Datum: 11.07.2011 09:51:43

Hi.
In meinem Skript werden die Bilder mit einem Link vervollständigt, falls das erwünscht ist. Das ganze mache ich mit regex, und zwar folgender Maßen:
if($wirdVerlink>0)
{
$suchen = '/<img(.*)src="{IMG_'.$index.'_NORMAL}(.*)/isU';
$ersetzen = '<a href="'.$link.'" title="'.$title.'"><img $1 src="{IMG_'.$index.'_NORMAL}$2';
$html = preg_replace($suchen, $ersetzen, $html);
}

Die $html Variable enthält die komplette Seite, genauer gesagt nicht befülltes Template. Etwa so:

<div>
<img src="{IMG_1_NORMAL}"/>
</div>
<table>
<tr>
<td>
<img class="bild" src="{IMG_2_NORMAL}"/>
</td>
<td>
<img id="bild3" src="{IMG_3_NORMAL}" class="bild"/>
</td>
</tr>
</table>
<div>
<img class="bild" src="{IMG_4_NORMAL}"/><img class="bild" src="{IMG_5_NORMAL}"/>
</div>

$index wird in einer Schleife von 1 bis count(bilder) durchlaufen. Das Skript tut auch wunderbar, bis zur Stelle, wo 2 oder mehr Bilder nacheinander kommen. Dann wird nämlich ein Link nur um das erste Bild gesetzt, und es ist egal, ob das Link zum zweiten oder dritten Bild gehört. So wie ich es sehe, wird im regex einfach nach einem img gesucht. Da es aber ein (.*) direkt nach dem Image-Tag steht, wird wohl das Anfangstag des ersten Bildes als Regex Start genommen. Das (.*) muss aber bleiben, das es sowie Klasse als auch ID oder was anderes an der Stelle kommen kann.
Wie kann ich nun die Tags trennen, dass regex exakt das zweite oder dritte (je nach $index) findet?
Danke im voraus.



Re: Regex zwei gleiche Tags trennen

Autor: kicia
Datum: 11.07.2011 16:43:31

> In meinem Skript werden die Bilder mit einem Link
> vervollständigt, falls das erwünscht ist. Das
> ganze mache ich mit regex, und zwar folgender
> Maßen:
> if($wirdVerlink>0)
> {
> $suchen =
> '/<img(.*)src="{IMG_'.$index.'_NORMAL}(.*)/isU';
> $ersetzen = '<a href="'.$link.'"
> title="'.$title.'"><img $1
> src="{IMG_'.$index.'_NORMAL}$2';
> $html = preg_replace($suchen, $ersetzen, $html);
> }
> ...
> Das (.*) muss aber bleiben, das es
> sowie Klasse als auch ID oder was anderes an der
> Stelle kommen kann.
> Wie kann ich nun die Tags trennen, dass regex
> exakt das zweite oder dritte (je nach $index)
> findet?

Man könnt's mit ([^>]*) versuchen (oder ([^>]*), weiss grad nicht, ob > maskiert werden muss).

Oder (vielleicht sogar besser) mit sowas wie ([a-zA-Z0-9="-_ ]*). Kann sein, dass ich hier irgendwelche Zeichen vergessen habe.



Re: Regex zwei gleiche Tags trennen

Autor: kicia
Datum: 11.07.2011 16:47:05

bei meinem vorigen Post sind die backslashes verloren gegangen, ich versuchs nochmal:

Wenn > maskiert werden muss, wäre das pattern:
[^BACKSLASH>]*
bzw.:
([^\>]*)



[OT] Re: Regex zwei gleiche Tags trennen

Autor: Freddy
Datum: 11.07.2011 20:31:15

> bei meinem vorigen Post sind die backslashes
> verloren gegangen, ich versuchs nochmal:

Wenn Du _einen_ (\) Backslash haben möchtest, musst Du zwei (\\) eingeben.


Gruß,
Freddy