【发布时间】:2012-03-06 22:37:57
【问题描述】:
Wikipedia 定义了许多人们可以使用的表情符号。我想将此列表与字符串中的单词匹配。我现在有这个:
$string = "Lorem ipsum :-) dolor :-| samet";
$emoticons = array(
'[HAPPY]' => array(' :-) ', ' :) ', ' :o) '), //etc...
'[SAD]' => array(' :-( ', ' :( ', ' :-| ')
);
foreach ($emoticons as $emotion => $icons) {
$string = str_replace($icons, " $emotion ", $string);
}
echo $string;
输出:
Lorem ipsum [HAPPY] dolor [SAD] samet
所以原则上这是可行的。但是,我有两个问题:
-
1234563有没有办法在没有空格的情况下存储表情符号,但仍然与周围有空格的 $string 匹配? (和现在的代码一样高效?)
-
或者有没有办法将表情符号放在一个变量中,然后在空间上爆炸以检查 $string?类似的东西
$表情符号 = 数组( '[HAPPY]' => ">:] :-) :) :o) :] :3 :c) :> =] 8) =) :} :^)", '[SAD]' => ":'-( :'( :'-) :')" //etc...
str_replace 是最有效的方法吗?
我问是因为我需要检查数百万个字符串,所以我正在寻找最有效的方法来节省处理时间:)
【问题讨论】:
-
你不应该也处理trans-ASCII emotica吗?你知道,网络现在超过 80% 的 Unicode。有一个完整的 Unicode 块专门用于此类事情:Blk=Emoticons。但有些也发生在其他地方。
-
@Li-aungYip Heh,这很好!不,我的意思是像 U+1F609
WINKING FACE这样的代码点 ????和 U+263AWHITE SMILING FACE☺。它们中的大多数都在 Emotions 块中(就像上面两个中的第一个),只有少数在旧版 BMP 中。 -
@tchrist 不,我只关心en.wikipedia.org/wiki/List_of_emoticons 上定义的西方表情符号,但感谢您的输入:)
-
不幸的是,默认的 Ubuntu 字体还没有包含该块中的所有代码点,所以我得到 U+263A 很好,但 U+1F609 是一个盒子。我想知道Win7的支持如何? ;)
-
这里在 Win7 上没有眨眼。没有合适的后备字体,是问题所在。
标签: php regex performance string-matching suffix-tree