Question

i want to replace all my images (with an own special attribute)

<img width="720" height="321" dl="text-text-text-text" alt="Marl's Palace of Sin" src="/images/sin-ambiente.jpg" title="Innenansichten des Hauses">

into this

<dl class="imgLeft">
  <dt>
     <img width="720" height="321" alt="Marl's Palace of Sin" src="/images/sin-ambiente.jpg" title="Innenansichten des Hauses">
 </dt>
  <dd>text-text-text-text</dd>
</dl>

my php function

function dlSytler($htmlContent)
{
    $regex = '#<img([^>]*).*dl="([^"/]*/?[^".]*\.[^"]*)"([^>]*).*>#'; 
    $replace = '<dl class="imgLeft"><dt><img$1 $3> </dt> <dd>$2</dd> </dl>';
    $htmlContent = preg_replace($regex, $replace, $htmlContent); 
    return $htmlContent;
}

the problem is, that the replace doesnt work an every image (and i dont know why).

I think my regex-rule is not perfect. Can anybody help me?

Was it helpful?

Solution

You ask where the problem is and I'll try to give you some pointers.

For starters, the idea of [^>]*.* makes no sense. It's saying something like "match X specifically or nothing, or match anything or nothing." In that case, it would be easy to just match anything.

This is simpler.

Search: (<img.*?)(dl=.*?)(alt=[^>]*>)

Replace: <dl class="imgLeft"><dt>\1\3</dt><dd>\2</dd></dl>

Demo

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top