如何将表情符号与正则表达式匹配?

时间:2011-05-02 21:07:04

标签: regex

我需要捕捉像

这样的笑脸
:)
:P
:-P
=)
:D
;)

等等,以及一般文字。这是我现在的正则表达式:

\b[0-9A-Za-z'\&\-\./()=:;]+\b

然而,它不匹配()=:;由于某些原因。我错过了什么吗?

编辑:根据Mark的反馈,我需要解析一个示例:

hi =as.) friend :) haha yay! ;) =) test test) R&R I.O.U. 24/7

这应该提取:

hi
friend
:)
haha
yay
;)
=)
test
test
R&R
I.O.U.
24/7

我无法使用任何提议的解决方案来解决这个问题。

3 个答案:

答案 0 :(得分:5)

这是一个捕获单词后跟上述示例的示例。它在单独的捕获组中捕获单个单词和后续表情符号。 Rubular link

\s(\w+)\s((?::|;|=)(?:-)?(?:\)|D|P))

修改根据编辑和给定的示例,此可能是您想要的。它定义了两个捕获组,一个用于一般文本,另一个用于表情符号。 Here is the Rubular link

([0-9A-Za-z'\&\-\.\/\(\)=:;]+)|((?::|;|=)(?:-)?(?:\)|D|P))

答案 1 :(得分:1)

我测试了它here with Rubular。如果我逃离/那么它就可以了。 (更新:并删除单词边界。)

[0-9A-Za-z'\&\-\.\/()=:;]+

更新:正斜杠转义是我从rubular获得的错误消息。这里真正的问题是\b锚点。它们匹配单词边界,即从[A-Za-z0-9_]到其他东西的边界。这意味着它与:-)不匹配,因为没有单词边界。

答案 2 :(得分:0)

如果你删除字符类前面的\ b和字符类后面的\ b或转义/它的工作原理。

我认为当你删除单词边界时它起作用的原因是因为它只匹配带有字母数字字符的单词...如果我不记错了。