【问题标题】:replace all smileys by enumeration in php在php中通过枚举替换所有笑脸
【发布时间】:2010-08-18 15:44:08
【问题描述】:

是否有任何快速(基于正则表达式?)的方法来替换文本中的所有笑脸,每个笑脸都有一个唯一的对应标识符?例如,第一次出现的:) 应该替换为笑脸1,:)) 应该替换为笑脸2,另一次出现的:) 应该替换为笑脸1?此外,标识符应该相同,使用不同的文本进行输入

典型符号(30_o 都应该是可识别的。

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

【问题讨论】:

  • 不清楚您要做什么。如果你只是想要一个笑脸实现,有很多开源 PHP 论坛软件可以提供一个已经工作的模型。

标签: php regex text replace


【解决方案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
?>

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这个的可扩展版本将有一个循环的笑脸符号数组,所以代码中只有一个实际的str_replace,添加新符号只是向数组添加一个新项目.
    【解决方案3】:

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

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

    【讨论】:

    • gerd,这应该是对 parkman47 答案的评论。另外,请编辑问题以提供有关您要执行的操作的明确详细信息-我无法确定这是特殊情况,还是您只是在重新发明轮子。
    【解决方案4】:

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

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

    谢谢!

    【讨论】:

    • 你能选择我的答案吗?我刚刚对另一个投了反对票 :o(
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多