phpbar.de logo

Mailinglisten-Archive

[php] Pattern matching / Wenn wir grad schon dabei sind...

[php] Pattern matching / Wenn wir grad schon dabei sind...

Roman Blöth bloeth at gosub.de
Fre Feb 4 15:16:12 CET 2005


Hallo zusammen,


gerade brüte ich auch über einem Pattern, das aber so nicht wirklich 
funktioniert, wie ich es bräuchte...

Das Problem:

Ich habe (HTML-) Texte, in denen bei Vorkommen eines Musters noch ein 
Tag eingebaut werden soll. Die Texte sind mehrzeilig - zum Beispiel so 
was hier:

-------------------------<schnipp-schnapp>-------------------------
<p><div class="picture_left"><img src="/imglib/742ec334" alt="" title="" 
width="250" height="120" border="0"><br />Saski Crescent, 
Warsaw</div>Our full
range of design and construction services include urban planning, concept
design, building architecture, landscaping and interior space planning. By
collaborating with renowned local and international architects and 
construction
companies we aim to optimise each property by achieving a harmony with its
location and future use. </p>




<p>For each
project we assemble an experienced, top-notch multidisciplinary 
architectural
design and construction team of professionals, managed and coordinated 
by our
in-house construction team. </p>";
-------------------------<schnipp-schnapp>-------------------------

So, sofern nun innerhalb eines Absatzes (<p> ... </p>) das Tag <div 
class="picture_left"> vorkommt, dann soll direkt nach dem ersten 
"</div>" das Tag <div align="justify"> und passend direkt vor dem ersten 
"</p>" noch ein </div> eingebaut werden.

Im Prinzip funktioniert das mit folgender Methode:

-------------------------<schnipp-schnapp>-------------------------
if (stristr($text, 'class="picture_left"'))
{
   $pattern="/<div class=\"picture_left\">.*<\/div>([\s|\S]*?)(<\/p>){1}/i";
   preg_match($pattern,$text,$matches);
   $pat=$matches[1];
   $text=preg_replace("/".$pat."/i","<div 
align=\"justify\">$pat</div>",$text);
}
-------------------------<schnipp-schnapp>-------------------------

Man sieht wohl schon, dass ich darin nicht sehr geübt bin, das ganze 
geht garantiert auch viel kürzer, aber mir ist momentan nur das Ergebnis 
wichtig, und daran hapert es, weil nämlich innerhalb von $matches[1] 
auch noch Slashes (/) und/oder HTML-Tags vorkommen können, die das 
preg_replace komplett aus dem Takt bringen...

Ich weiß, dass das viel Zeugs ist, aber vielleicht hat ja der eine oder 
andere die Muse oder Standardwissen, das Problem zu lösen zu helfen....


Grüße,
Roman.


php::bar PHP Wiki   -   Listenarchive