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

时间:2019-07-14 17:24:03

标签: php regex

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

例如,我要匹配此字符串中不是表情符号的特殊字符:❤️???????❤️

当前作为我的正则表达式

[^\x00-\x7F]+

当前输出:❤️???????❤️

想要的输出:???????

我将如何解决此问题?

3 个答案:

答案 0 :(得分:0)

也许,此表达式可能有效:

$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);

输出

???????️

如果要浏览/简化/修改该表达式,请在this demo的右上角进行解释。

参考:

javascript unicode emoji regular expressions

答案 1 :(得分:0)

使用以下unicode正则表达式:

[^\p{M}\p{S}]+
  • \p{M}匹配要与另一个字符(此处为)组合的字符。
  • \p{S}匹配符号(在这种情况下为)。

Demo

答案 2 :(得分:0)

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

表情符号和AlphaNum字符之间几乎没有重叠。
有几个键帽表情符号,但是由于它们的顺序超出了
前几位不与字母数字重叠,仅需放置
在alphanum类前面的负面展望。

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

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