是否有任何快速(基于正则表达式的?)方法来替换文本中的所有表情符号,每个表单都有一个唯一的相应标识符?例如,第一次出现的:)应该被smiley1取代,:))由smiley2和另一次出现的:)再次由smiley1取代?此外,使用不同的输入文本
时,标识符应该相同典型符号(< 5 chars?)的任何潜在组合,例如:; - ()&%} {[] D< 30_o应该是可识别的。
这可以在不产生大量所有组合的情况下完成吗?万一,怎么样?
答案 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:) }:)');
?>
谢谢!