如何与非字母数字的正则表达式特殊字符匹配,同时忽略表情符号



我目前遇到问题,我不知道如何使正则表达式匹配特殊字符,同时忽略表情符号。

示例,我想匹配此字符串中不是表情符号的特殊字符:❤️测试❤️

目前作为我的正则表达式,我有

[^x00-x7F]+

电流输出:❤️测试❤️

所需输出:测试

我将如何解决这个问题?

也许,这个表达式可能有效:

$re = '/[x{1f300}-x{1f5ff}x{1f900}-x{1f9ff}x{1f600}-x{1f64f}x{1f680}-x{1f6ff}x{2600}-x{26ff}x{2700}-x{27bf}x{1f1e6}-x{1f1ff}x{1f191}-x{1f251}x{1f004}x{1f0cf}x{1f170}-x{1f171}x{1f17e}-x{1f17f}x{1f18e}x{3030}x{2b50}x{2b55}x{2934}-x{2935}x{2b05}-x{2b07}x{2b1b}-x{2b1c}x{3297}x{3299}x{303d}x{00a9}x{00ae}x{2122}x{23f3}x{24c2}x{23e9}-x{23ef}x{25b6}x{23f8}-x{23fa}]/u';
$str = '❤️𝓉𝑒𝓈𝓉𝒾𝓃𝑔❤️';
$subst = '';
echo preg_replace($re, $subst, $str);

输出

𝓉𝑒𝓈𝓉𝒾𝓃𝑔️
如果您希望

探索/简化/修改表达式,请在此演示的右上角面板上解释该表达式。

参考:

JavaScript Unicode 表情符号正则表达式

使用以下 unicode 正则表达式:

[^p{M}p{S}]+
  • p{M}匹配要与另一个字符组合的字符(此处(。
  • p{S}匹配符号(在本例中为(。

演示

我认为您的帖子标题与正文不匹配。

表情符号和 AlphaNum 字符之间几乎没有重叠。
有几个键帽表情符号,但由于它们的顺序超出了
第一个数字不与字母数字重叠,只需放置
在阿尔法努姆类面前的消极展望。

'~(?![0-9]x{FE0F}x{20E3}|x{2139})[pLpN]+~'

https://regex101.com/r/1JcUqY/1

最新更新