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
 
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?
 
);
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
 
Du kannst den Ausdruck noch weiter verbessern:
Code:
~<p>\s*<a href="([^"]*)" title="([^"]*)" class="thickbox">\s*<img src="([^"]*)" alt="([^"]*)"/>\s*</a>(\s*)</p>~i
 
~<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
 
Zurück