REGEX - Fehler

rauchmelder

Mitglied
Hi,

seit heute oder besser gestern beschäftige ich mich mit REGEX,

ich habe folgenden string:

Code:
$content = '<p>
  <a href="./img/meinbild.jpg" title="BILD" class="thickbox">
    <img src="./img/thumb.jpg" alt="BILD2"/>
  </a>
  <strong>Titel</strong><br /><br />
blablabla.<br />
blablabla.</p>';

Diesen Werte ich mit folgenden paar PHP Schritten aus:

PHP:
$tmp = str_replace("\n","",$content);
preg_match('~<p>.*<a href="(.*)" title="(.*)" class="thickbox">.*<img src="(.*)" alt="(.*)"/>.*</a>(.*)</p>~i', $tmp, $matches);


Danach kann ich über die Elemente des Arrays $matches einfach auf die Inhalte zugreifen. Das Funktioniert ohne Probleme. Warum ich erst alle \n entferne hat den Hintergrund, ich habe es nicht geschaft den REGEX Operator . und \s zu kombinieren. Vl. hat hier jemand einen wertvollen Input.

Jetzt legen wir das Augenmerk auf $matches[5]:

Code:
<strong>Titel</strong><br /><br />
blablabla.<br />
blablabla.</p>

Nun zu meinem Problem:

Wenn ich folgenden String

Code:
$content = '<p>
  <a href="./img/meinbild.jpg" title="BILD" class="thickbox">
    <img src="./img/thumb.jpg" alt="BILD2"/>
  </a>
  <strong>Titel</strong><br /><br />
blablabla.<br />
blablabla.<br />
<a href="http://google.com/">google hilft mir dabei leider nicht</a></p>';

durch die oben genannten Zeilen schicke, ist $matches[5] leer ...

Jemand eine Idee woran das liegen könnte, es ist doch nur ein Hyperlink dazugekommen...

Vielen Dank im Vorraus

lg Christopher
 

rauchmelder

Mitglied
Gut Fehler gefunden, er interpretiert immer das letzte </a> als das gemeinte, das will ich jedoch nicht, er soll das erste das nach img kommt nehmen, gibts da eine Möglichkeit ihm das Anzuschaffen?
 

rauchmelder

Mitglied
);
preg_match('~<p>.*<a href="(.*)" title="(.*)" class="thickbox">.*<img src="(.*)" alt="(.*)"/>\s*</a>(.*)</p>~i', $tmp, $matches);


\s* statt .* weil hier sowieso keine anderen Zeichen als Leerzeichen erlaubt sind :)

selbst is der Mann.

Danke trotzdem,

lg Chris
 

Gumbo

Erfahrenes Mitglied
Du kannst den Ausdruck noch weiter verbessern:
Code:
~<p>\s*<a href="([^"]*)" title="([^"]*)" class="thickbox">\s*<img src="([^"]*)" alt="([^"]*)"/>\s*</a>(\s*)</p>~i
 

rauchmelder

Mitglied
~<p>\s*<a href="([^"]*)" title="([^"]*)" class="thickbox">\s*<img src="([^"]*)" alt="([^"]*)"/>\s*</a>(\s*)</p>~i

Dann würde er mir aber im letzten Ausdruck nurmehr Leerzeichen und br's erlauben oder? In meinem Fall müsste es dann so heißen:

~<p>\s*<a href="([^"]*)" title="([^"]*)" class="thickbox">\s*<img src="([^"]*)" alt="([^"]*)"/>\s*</a>(.*)</p>~i

lg & danke!

Chris