mit regulärer Ausdruck (string durchsuchen finden und ersetzen)

mogmog

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgendes Problem:
ich habe eine Variable welche wie folgt modifiziert werden muss.
Beispiel für den Inhalt einer Variablen:
HTML:
<h1>überschift</h1>
<img src="link/zum/bild.jpg" width="100" height="200" alt="höhe=300 und breite=300" />
<p>textbock</p>
<p><img src="link/zum/bild.jpg" width="100" height="200" alt="höhe=300 und breite=300" />2textblock</p>

nun soll dies für jedes Bild (img tag) folgendes geschehen:
1. höhe und breite ausgelesen werden
2. in den "alt" tag an die richtige stelle Geschrieben werden
3. danach sollte der string wie folgt aussehen
HTML:
<h1>überschift</h1>
<img src="link/zum/bild.jpg" width="100" height="200" alt="höhe=100 und breite=200" />
<p>textbock</p>
<p><img src="link/zum/bild.jpg" width="200" height="400" alt="höhe=200 und breite=400" />2textblock</p>

mein Lösungsansatz wäre nun folgendes.
ich nehme das ganze mit "preg_match" auseinander und nun mein Problem ich mache gerade meine ersten gehversuche mit regulären ausdrücken und komme einfach nicht weiter:
PHP:
preg_match('/<img(.*)width\="?(\S+)"(.*)height\="?(\S+)"(.*)alt\="?(\S+)"(.*)\>/i', $str, $txt);

So komme ich irgendwie an die Informationen dran die ich haben will aber immer nur für das letzte Bild und muss aber alles ersetzen und dann auch wieder zusammen setzen.

Nun stehe ich einfach auf dem Schlauch und komme nicht. (!)

Hat einer eine Idee bzw. einen Lösungsansatz, Idee, Erklärung wie man das macht oder wo mein denk Fehler ist.

Grüße mogmog
 
Hallo,

mal vorab als Leidensgenosse, der sich auch gerade einarbeitet: http://www.peterkropff.de/tutorials/php_regexp/php_regexp.htm. Sehr schönes Tutorial zum Thema, das sogar ich verstanden zu haben glaube :).

Zum anderen würde ich mich hier noch nicht mit regulären Ausdrücken rumschlagen, da du ja eigentlich sehr genau weißt, wie dein String aussieht. Such doch einfach nach width, hol dir von da ausgehend die Höhe und bau die anschließend deinen String wieder zusammen. Ich wäre also eher bei den Stringfunktionen.

Ansonsten wünsche ich dir kompetenteren Rat :)

Gruß, Gardiner
 
Probier mal folgendes:
PHP:
<?php
// Text bzw. String der durchsucht werden soll 
$string = <<<EOF
<h1>überschift</h1>
<img src="link/zum/bild.jpg" width="100" height="200" />
<p>textbock</p>
<p><img src="link/zum/bild.jpg" width="100" height="200" />2textblock</p>
EOF;

// das Suchmuster mit Delimiter und Modifer (falls vorhanden) 
$pattern = '/<img src="(.*)" width="([0-9]+)" height="([0-9]+)" \/>/';

// Ersatzstring 
$ersatz = '<img src="$1" width="$2" height="$3" alt="Höhe: $3 und Breite: $2" />';

// RegEx mit preg_replace() auswerten 
echo preg_replace($pattern, $ersatz, $string);
?>

Das ergibt das hier:
HTML:
<h1>überschift</h1>
<img src="link/zum/bild.jpg" width="100" height="200" alt="Höhe: 200 und Breite: 100" />
<p>textbock</p>
<p><img src="link/zum/bild.jpg" width="100" height="200" alt="Höhe: 200 und Breite: 100" />2textblock</p>
 
@Gardiner: Danke dir für den tip ich habe mir das mal durchgelesen und es wird auch echt gut erklärt.

@einfach nur crack: Danke für die Lösung des Problemen ich habe es auch noch mal umbauen müssen da sich bei mir einiges geändert hatte das ist nicht schlimm denn ich hatte einfach einen komplett falschen Ansatz =)

ich muss eich beiden einfach danke und wie es auf der Seite steht Gardien ÜBEN ÜBEN ÜBEN......

danke Jungs.
 
Zurück