2017-07-25 157 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