Using regex to match non-word characters BUT NOT smiley faces

房东的猫 提交于 2019-12-05 20:16:48
Andrew Clark

It should be pretty easy to due this using a negative lookahead. Basically the match will fail at any position where the regex inside of the (?!...) group matches. You should follow the negative lookahead with a single wildcard (.) to consume a character if the lookahead did not match (meaning that the next character is a non-letter character that is not part of a smiley face).

edit: Clearly I hadn't tested my original regex very thoroughly, you also need a negative lookbehind following the . to make sure that the character you consumed was not the second character in a smiley:

(?![a-zA-Z ]|=\)|=\]|:P).(?<!=\)|=\]|:P)

Note that you might be able to shorten the regex by using character classes for the eyes and the mouth, for example:

[:=][\(\)\[\]]
  ^    ^-----mouth
  |--eyes
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!