Reputation: 369
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>
<{smile:smile3}>
but i need
{smile:smile3}
Upvotes: 1
Views: 1002
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
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