iOS开发-新浪微博-正则表达式

最近自己在做新浪微博,需要检索并高亮显示部分文字:
(#话题#、@用户名、链接、表情)
查来查去,应该使用“正则表达式”
研究了几天,得出了新浪微博的正则表达式如下:

#话题#######
#话题#的正则表达式
@用户名

@"@[\u4e00-\u9fa5a-zA-Z0-9_-]{2,30}"

链接
链接URL的正则表达式
表情

@"(\[[0-9a-zA-Z\u4e00-\u9fa5]+\])"

在iOS中如何使用?

1、可将匹配字符串的代码写到NSString的分类(Category)中

iOS开发-新浪微博-正则表达式_第1张图片
匹配新浪微博正文的正则表达式(放在了分类中了).png

2、在需要使用该匹配处理的地方,包含分类的.h文件,使用该对象方法即可(也可写为类方法,不过类方法需要再添个参数以传入源字符串。这写为对象方法,源字符串就可直接调用该方法,其中的self就是调用该方法的那个源字符串对象)

效果

iOS开发-新浪微博-正则表达式_第2张图片
Simulator Screen Shot 2016年8月9日 下午6.46.53.png

iOS开发-新浪微博-正则表达式_第3张图片
Simulator Screen Shot 2016年8月9日 下午6.50.26.png

注:

匹配粗体中括号间的内容(也带上两边的粗体中括号):
粗体中括号及其中间内容的正则表达式.png
匹配粗体中括号间的内容(不带两边的粗体中括号)
只匹配粗体中括号之间的内容(不带两边的粗体中括号)的正则表达式.png
匹配书名号之间的内容(不带两边的书名号)
匹配书名号之间的内容(不带两边的书名号.png
解释:

(?<=xxx)是以xxx开头的字符串, 但不包含xxx本身。
(?=xxx)就匹配以xxx结尾的字符串, 但不包含xxx本身。

(?<=《)即以《开头, 但不包含《
(?=》)即以》结尾,但不包含》


即匹配非》的字符,将其写在(?<=《)和(?=》)之间,就表示,匹配以《开头(但不包含《),以》结尾(但不包含》)的非》字符串。

效果
iOS开发-新浪微博-正则表达式_第4张图片
只匹配粗体中括号和书名号之间的内容.png

你可能感兴趣的:(iOS开发-新浪微博-正则表达式)