我正在开发一个网站,我想让用户可以在帖子上微笑。 我的(只是功能性的)想法是以这种方式使用数组:
$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)#'
,因为我希望表情符号仅在前面的字符为“开始”(^
)或“空白”并且成功时才会应用字符是“结束”($
)或“空白”。什么是正确的正则表达式?
答案 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);
}