user2368299
user2368299

Reputation: 369

php regex replace image tags

I need replace image tags with smiles to {smile:smilename}

   <?php
    $pattern = '<img src="/img/smile/(.*?).gif">';
    $replacement = '{smile:$1}';
    $subject = '<div contenteditable="true" id="message_text">text<img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"><img src="/img/smile/smile3.gif"></div>';
    echo preg_replace($pattern, $replacement, $subject, -1 );
    ?>

I get:

<div contenteditable="true" id="message_text">text<{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}><{smile:smile3}></div> 

but i need

Upvotes: 1

Views: 1002

Answers (2)

MDEV
MDEV

Reputation: 10838

Your < and > are being treated as delimiters, instead of part of the expression. Use:

$pattern = '#<img src="/img/smile/(.*?).gif">#';

See the php.net regexp delimiters documentation (third code example, and top user note)

Upvotes: 9

Segabond
Segabond

Reputation: 1143

You need to use a delimiting characters in your pattern and escape this character inside.

$pattern = '/<img src="\/img\/smile\/(.*?).gif">/';

Or

$pattern = '@<img src="/img/smile/(.*?).gif">@';

Upvotes: 6

Related Questions