-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 に答える