Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
微笑正则表达式(PHP)_Php_Regex_Preg Replace - Fatal编程技术网

微笑正则表达式(PHP)

微笑正则表达式(PHP),php,regex,preg-replace,Php,Regex,Preg Replace,我有一个字符串: $str = "Hello:smile: How:flushed: Are you :neckbeard: ?"; 我要接收此字符串: Hello<img src="/img/emoji/smile.png"> How<img src="/img/emoji/flushed.png"> Are you <img src="/img/emoji/neckbeard.png"> ? 你好,你好吗? 我构造正则表达式: $res = preg

我有一个字符串:

$str = "Hello:smile: How:flushed: Are you :neckbeard: ?";
我要接收此字符串:

Hello<img src="/img/emoji/smile.png"> How<img src="/img/emoji/flushed.png"> Are you <img src="/img/emoji/neckbeard.png"> ?
你好,你好吗? 我构造正则表达式:

$res = preg_replace('/(.+):([a-z]{1,10}):(.+)/i', '$1<img src="/img/emoji/$2.png" >$3', $str);
$res=preg_replace('/(.+):([a-z]{1,10}):(.+)/i','$1$3',$str);

但这个表情只取代了最后的微笑。如何更改图片的所有微笑?

仅更换预期零件:

$res = preg_replace('/:([a-z]{1,10}):/i', '<img src="/img/emoji/$1.png" >', $str);
$res=preg_replace('/:([a-z]{1,10}):/i',''$str);

将替换项更改为

$res = preg_replace('/:([a-z]{1,10}):/i', '<img src="/img/emoji/$2.png" >', $str);
$res=preg_replace('/:([a-z]{1,10}):/i',''$str);

每次替换发生时,您都返回整个原始字符串,因此每次它返回原始字符串时,都会还原,减去上次的更改。

Remove
+
s:
preg_replace('/:([a-z]{1,10}):/i','','$str)
为什么确定微笑只能包含1到10个符号?真的很抱歉-java混淆:)