更新
使用:regex101之后,我发现它只对1个结果进行匹配,当将修饰符更改为\ g时,它就吓坏了! :( - 样本测试:https://regex101.com/r/yD9hI4/1
更新2
在上面的示例中添加ug
修饰符时,它(有点)有效!但PHP引发了Unknown modifier g
的异常:(无法获胜!讨厌正则表达式......
更新3
此后已在preg_replace
上阅读并且它不理解\g
,因为它在默认限制(默认情况下)时默认匹配所有内容。所以现在我真的不明白为什么preg_replace
只找到一个匹配并忽略其余的匹配。
原始问题 我正在尝试删除表情符号/ Unicode图片字符的所有引用,但我的正则表达式与gmail不匹配。我已经下载了以下电子邮件,以便处理:
Test
*Test*
*[image: Inline images 1]*
*Test?*
Test?
=F0=9F=98=88
TEST!
我正试图摆脱=F0=9F=98=88
。在这个例子中,它是带角的笑脸(google风味)。其中由unicode值表示:U+1F608
(hex / utf-8:f0 9f 98 88
) - 现在,这是唯一不会消失的bugger,其他所有内容都由我的正则表达式覆盖:< / p>
/[\x{1F600}-\x{1F64F}]/u
(表情符号)和/[\x{1F680}-\x{1F6FF}]/u
(传输等)
现在在任何人指出明显的并且说:“= F0 = 9f = 98 = 88不是你正在寻找的”,我同意,但我想知道为什么,当我和其他人一起测试时表情符号,只有魔鬼魔鬼才能解析?
任何人(具有比我更大的正则表达式知识)都能解释出现了什么问题吗?
请求的代码
private function removePictureCharacters($text) {
$clean_text = "";
// Match Emoticons
$regexEmoticons = '/([\x{1F600}-\x{1F64F}])/u';
$clean_text = preg_replace($regexEmoticons, '', $text);
// Match Miscellaneous Symbols and Pictographs
$regexSymbols = '/([\x{1F300}-\x{1F5FF}])/u';
$clean_text = preg_replace($regexSymbols, '', $clean_text);
// Match Transport And Map Symbols
$regexTransport = '/([\x{1F680}-\x{1F6FF}])/u';
$clean_text = preg_replace($regexTransport, '', $clean_text);
// Match Miscellaneous Symbols
$regexMisc = '/([\x{2600}-\x{26FF}])/u';
$clean_text = preg_replace($regexMisc, '', $clean_text);
// Match Dingbats
$regexDingbats = '/([\x{2700}-\x{27BF}])/u';
$clean_text = preg_replace($regexDingbats, '', $clean_text);
return $clean_text;
}
答案 0 :(得分:2)
我有一个非常脆弱的黑客,但它确实完成了工作:
private function removePictureCharacters($text) {
$clean_text = "";
// Never trust a horned smiler
$smiley = json_decode('"\u1F608"');
$clean_text = preg_replace("/$smiley/u", '', $text);
// Match Emoticons
$regexEmoticons = '/([\x{1F600}-\x{1F64F}])/u';
...
}