Mil*_*bar 4 php regex preg-match emoji telegram
我有一个包含表情符号的字符串.我想要从该字符串中提取表情符号,我正在使用下面的代码,但它不是我想要的.
$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);
Run Code Online (Sandbox Code Playgroud)
我要这个:
$emojis = ["", ""];
Run Code Online (Sandbox Code Playgroud)
但是回复一下:
$emojis = [""]
Run Code Online (Sandbox Code Playgroud)
如果:
$string = "?"
Run Code Online (Sandbox Code Playgroud)
它只返回第一个表情符号
$emoji = [""]
Run Code Online (Sandbox Code Playgroud)
试着看preg_match_all功能.preg_match停止照顾它找到第一场比赛,这就是为什么你只得到第一个表情符号.
取自这个答案:
preg_match停止照看第一场比赛.preg_match_all另一方面,继续查看,直到它完成处理整个字符串.找到匹配后,它会使用字符串的其余部分来尝试应用另一个匹配项.
所以你的代码将成为:
$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] => )
Run Code Online (Sandbox Code Playgroud)