最近自己在做新浪微博,需要检索并高亮显示部分文字:
(#话题#、@用户名、链接、表情)
查来查去,应该使用“正则表达式”
研究了几天,得出了新浪微博的正则表达式如下:
#话题#######
#话题#的正则表达式
@用户名
@"@[\u4e00-\u9fa5a-zA-Z0-9_-]{2,30}"
链接
链接URL的正则表达式
表情
@"(\[[0-9a-zA-Z\u4e00-\u9fa5]+\])"
在iOS中如何使用?
1、可将匹配字符串的代码写到NSString的分类(Category)中
匹配新浪微博正文的正则表达式(放在了分类中了).png
2、在需要使用该匹配处理的地方,包含分类的.h文件,使用该对象方法即可(也可写为类方法,不过类方法需要再添个参数以传入源字符串。这写为对象方法,源字符串就可直接调用该方法,其中的self就是调用该方法的那个源字符串对象)
效果
Simulator Screen Shot 2016年8月9日 下午6.46.53.png
Simulator Screen Shot 2016年8月9日 下午6.50.26.png
注:
匹配粗体中括号间的内容(也带上两边的粗体中括号):
粗体中括号及其中间内容的正则表达式.png
匹配粗体中括号间的内容(不带两边的粗体中括号)
只匹配粗体中括号之间的内容(不带两边的粗体中括号)的正则表达式.png
匹配书名号之间的内容(不带两边的书名号)
匹配书名号之间的内容(不带两边的书名号.png
解释:
(?<=xxx)是以xxx开头的字符串, 但不包含xxx本身。
(?=xxx)就匹配以xxx结尾的字符串, 但不包含xxx本身。
(?<=《)即以《开头, 但不包含《
(?=》)即以》结尾,但不包含》
即匹配非》的字符,将其写在(?<=《)和(?=》)之间,就表示,匹配以《开头(但不包含《),以》结尾(但不包含》)的非》字符串。
效果
只匹配粗体中括号和书名号之间的内容.png