http://blog.csdn.net/xu_song/article/details/50510258
1.
<span style="color:#50a14f">"(.*?)(<[^>]+>|\\Z)"</span>
这个正则式的解释:
<span style="color:#50a14f">(.*?)</span>
懒惰匹配
<span style="color:#50a14f"><[^>]+></span>
^>表示除了>之外的字符
[^>]+ 表示一个或者多个
|表示分支条件,也就是或者的意思
2.
(?<=<(\w+)>).*(?=<\/\1>),详细解释下:
?<=和?=都表示零宽断言,一个匹配后面一个匹配前面,对应到上面的例子中,亦即.*前面必须要有<(\w+)>,后面必须要有<\/\1>。零宽断言不体现到最终的匹配结果中。再细看下,<(\w+)>匹配<tag>类型,\w表示数字、字母、下划线;<\/\1>中\/匹配斜杠/,\1表示捕获组,亦即从正则表达式左边开始的第一个小括号中的内容,注意这里不包含零宽断言的括号,在上例中表示(\w+)中的部分。中间的.*表示任意多个非换行符。
总结下:匹配类似<tag>content</tag>格式中的content部分
?<=和?=都表示零宽断言,一个匹配后面一个匹配前面,对应到上面的例子中,亦即.*前面必须要有<(\w+)>,后面必须要有<\/\1>。零宽断言不体现到最终的匹配结果中。再细看下,<(\w+)>匹配<tag>类型,\w表示数字、字母、下划线;<\/\1>中\/匹配斜杠/,\1表示捕获组,亦即从正则表达式左边开始的第一个小括号中的内容,注意这里不包含零宽断言的括号,在上例中表示(\w+)中的部分。中间的.*表示任意多个非换行符。
总结下:匹配类似<tag>content</tag>格式中的content部分
// 零宽断言 即\w前面必须要有一个color=" 注意
\w | 匹配字母或数字或下划线或汉字 |
let colorRegex = try NSRegularExpression(pattern: "(?<=color=\")\\w+",
options: NSRegularExpression.Options(rawValue: 0))