1

我需要用微笑替换图像标签到 {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 );
    ?>

我得到:

<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}>

但是我需要

  • {smile:smile3}
4

2 回答 2

9

您的<and>被视为分隔符,而不是表达式的一部分。利用:

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

请参阅 php.net regexp delimiters 文档(第三个代码示例和顶级用户注释)

于 2013-08-21T13:45:23.027 回答
6

您需要在模式中使用定界字符并在其中转义该字符。

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

或者

$pattern = '@<img src="/img/smile/(.*?).gif">@';
于 2013-08-21T13:46:19.123 回答