2017-07-25 158 views
2

我有一个字符串包含表情符号。 我想从该字符串中提取表情符号,我使用下面的代码,但它不是我想要的。从字符串提取表情符号

$string = " hello world "; 

preg_match('/([0-9#][\x{20E3}])|[\x{00ae}\x{00a9}\x{203C}\x{2047}\x{2048}\x{2049}\x{3030}\x{303D}\x{2139}\x{2122}\x{3297}\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u', $string, $emojis); 

我想这样:

$emojis = ["", ""]; 

但返回此:

$emojis = [""] 

而且,如果:

$string = "☝" 

它只返回第一个表情符号

$emoji = [""] 
+0

尝试'preg_match_all()' – ArtOsi

回答

4

试试看preg_match_all函数。 preg_match停止发现第一场比赛后,这就是为什么你只能得到第一个表情符号回来。

this answer:

preg_match采取的第一个比赛后停止查找。另一方面,preg_match_all继续查看,直到完成处理整个字符串。一旦找到匹配,它就会使用字符串的其余部分来尝试并应用另一个匹配。

http://php.net/manual/en/function.preg-match-all.php

所以,你的代码将变成:

$string = " hello world "; 

preg_match_all('/([0-9#][\x{20E3}])|[\x{00ae}\x{00a9}\x{203C}\x{2047}\x{2048}\x{2049}\x{3030}\x{303D}\x{2139}\x{2122}\x{3297}\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u', $string, $emojis); 

print_r($emojis[0]); // Array ([0] => [1] => ) 
+0

感谢名单,这是我想要的, –

+0

@Miladranjbar没问题! :) – crazyloonybin

+0

我将如何使用它来覆盖跨度中的所有emojis? – rassoh