正则表达式preg_replace表情符号

时间:2012-06-24 16:58:21

标签: php regex preg-replace

  

可能重复:
  Replace a list of emoticons with their images

我正在开发一个网站,我想让用户可以在帖子上微笑。 我的(只是功能性的)想法是以这种方式使用数组:

$emoticons = array(
array("17.gif",":)"),
array("6.jpg",":P"),
.....
array("9.jpg",":'("),
array("5.gif","X)")
);

图像在[0]上,图像在[1]上。 并在每个$ post:

foreach($emoticons as $emoticon){
     $quoted_emoticon = preg_quote($emoticon[1],"#");
     $match = '#(?!<\w)(' . $quoted_emoticon .')(?!\w)#';
     $post = preg_replace($match,'<img src="images/emoticons/'.$emoticon[0].'">',$post);
}

这样做很好,但我的问题是'#(?!<\w)('')(?!\w)#',因为我希望表情符号仅在前面的字符为“开始”(^)或“空白”并且成功时才会应用字符是“结束”($)或“空白”。什么是正确的正则表达式?

2 个答案:

答案 0 :(得分:0)

我会选择:

$e = array( ':)' => '1.gif',
            ':(' => '2.gif',
          );

foreach ($e as $sign => $file) { 
  $sign = preg_replace('/(.)/', "\\$1", $sign); 
  $pattern = "/(?<=\s|^)$sign(?=\s|$)/";
  $post = preg_replace($pattern, " <img src=\"images/emoticons/$file\">", $post);  
} 

答案 1 :(得分:0)

我认为你希望看到积极的态度并积极向前看。

示例:

(?<=\s|^)(\:\))(?=\s|$)

您的示例已更新:

foreach($emoticons as $emoticon){
     $quoted_emoticon = preg_quote($emoticon[1],"#");
     $match = '(?<=\s|^)(' . $quoted_emoticon .')(?=\s|$)';
     $post = preg_replace($match,'<img src="images/emoticons/'.$emoticon[0].'">',$post);
}