【发布时间】:2015-02-10 18:25:05
【问题描述】:
我必须在给定文本中查找并替换所有 Facebook 样式的表情符号,但找不到正确的正则表达式来执行此操作。根据经验,它必须匹配用户有意输入的所有表情符号,不匹配可以是地址、数字、运输代码、链接、随机文本 ecc 的一部分的表情符号。 ..
这个(^|\s)(:D|:\/)(\s|\W|$) 不适用于我测试的所有案例(标有"must match" 和"must not match"):
:D "must match" Sample text for testing:
abcdefghijkl:Dm "must not match" nopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789 +-:D.,! "must not match" @#$%^&*();\/|<>"' "must match" :/.
12345 :/-98.7 "must not match" 3.141 ://.6180 "must not match" 9,000 +42
555.123.4567 :D+1-(80 "must not match" :D555-2468: "must not match"
foo@demo.net "must match" bar.ba@test.co.uk :D
:/ "must match" http://"must not match"foo.co.uk/ "must match" :D?
http://regexr.com/foo.html?q=bar
:D
:/
:D
:D
"must all 4 match"
现场测试用例:http://regexr.com/3ad1j
我也试过(^|\s|\B)(:D|:\/)(\s|\B|\b|$),它匹配所有"must match",但也匹配三个"must not match"...
举例来说,这个正则表达式只有两个表情符号,在实际情况下,我有一个包含 50 个表情符号的数组来查找并替换为相应的表情符号。
更新:新的测试用例 http://regexr.com/3ad6i 更新了 (^|\s)(:D|:\/)(?=\s|[^0-9A-Za-z+-]|$) 正则表达式,还有一些 "must not match" 需要消除。
更新 2:用更新的 (^|\s)(:D|:\/)(?=\s|[^"-(*+\-/->@-~]|$) 正则表达式更新了测试用例 http://regexr.com/3ad6i,效果很好,我可以通过某种方式改进它吗?
【问题讨论】:
-
更具体地说明您的条件是什么,为什么“:/. 12345 :/-98.7”应该匹配,为什么不应该匹配“nopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 +-:D.,!”匹配你到底在看什么对于
-
它必须匹配用户有意输入的所有表情符号,而不是可以作为地址、数字、运输代码、链接、随机文本的一部分的表情符号...