-1

可能重复:
用他们的图像替换表情符号列表

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

$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)#'时才应用表情符号。什么是正确的正则表达式来做到这一点?^$

4

2 回答 2

1

我认为你想要积极的目光和积极的未来。

例子:

(?<=\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);
}
于 2012-06-24T17:23:50.687 回答
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);  
} 
于 2012-06-24T17:16:14.660 回答