在php中通过枚举替换所有表情符号

时间:2010-08-18 15:44:09

标签: php regex text replace

是否有任何快速(基于正则表达式的?)方法来替换文本中的所有表情符号,每个表单都有一个唯一的相应标识符?例如,第一次出现的:)应该被smiley1取代,:))由smiley2和另一次出现的:)再次由smiley1取代?此外,使用不同的输入文本

时,标识符应该相同

典型符号(< 5 chars?)的任何潜在组合,例如:; - ()&%} {[] D< 30_o应该是可识别的。

这可以在不产生大量所有组合的情况下完成吗?万一,怎么样?

4 个答案:

答案 0 :(得分:1)

您在寻找preg_replace_callback()吗?你甚至可以在php 5.3中使用闭包。我不清楚目标是什么,所以在这一点上,这是我能提供的最好的,如果你能澄清一下,那么也许我可以看到我能为样本代码提出什么。

编辑,这是PHP手册中的一个例子。在这种情况下没有特别的帮助,但如果你只是改变正则表达式,函数和字符串(基本上一切,大声笑),那么它将完成这项工作:

<?php
echo preg_replace_callback('/-([a-z])/', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>

答案 1 :(得分:0)

我不明白为什么你不能这样做:

str_replace(":))","<img src=\"smiley1.jpg\">",$STRING)
str_replace(":)","<img src=\"smiley2.jpg\">",$STRING)

等......似乎是最简单的解决方案和逻辑

答案 2 :(得分:0)

显然,使用这样的str_replace无法做到这一点。你会如何获取“:)))”或者你的列表中也没有“-.-”?枚举所有潜在的表情是一项艰巨的任务,结果是n!/(n-k)!候选人。这里,在上面提供的例子中,n = 18,k = 5 ...... 因此,我想要一种使用正则表达式的方法 - 但我不知道如何用相同的文本替换每次表示笑脸的每个字符组合。

想法:是否可以将回调函数与哈希结合使用?

答案 3 :(得分:0)

是的,蒂姆!这正是写下最后一篇文章时我想到的。所以解决方案是

<?php
    echo preg_replace_callback("/([\)\(\[\]<>#-\.:;*+{}]{2,9})/", function ($match) {
        return " ".md5($match[1])." ";
    }, ':::-) :-)) nope (yeah) cool:) }:)');
?>

谢谢!