小小过滤<span>xxxxxxxx></span>
不少网站喜欢在文章中间来些隐藏的版权文字,有的是和底色一致,全选复制的时候才出现,有的是代码里隐藏,防止被采集,
基本上时用<span><div>之类 ,这里把这些东西过滤掉,仅以<span>为例子,不存在嵌套。
string a="未<span>上的发</span>加载符号未加载符号未加载符号未加载符号未加载符号<span>dddddd</span>未加载符号未加载<span>测试页面</span>符号未加载符号未加载符号";
//System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<span>(?<content>.+?)</span>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
//string b=regex1.Replace(a,"");
string b=System.Text.RegularExpressions.Regex.Replace(a,@"<span>(?<content>.+?)</span>","", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
b="未加载符号未加载符号未加载符号未加载符号未加载符号未加载符号未加载符号未加载符号未加载符号"
正则表达式解释:
<span>(?<content>.+?)</span>
1.寻找以<span> 以</span>结尾的串
2.量词表示一个子表达式可以匹配的次数。量词可以用来修饰一个字符、字符组,或是用()括起来的子表达式。一些常用的量词被定义成独立的元字符。
表达式 |
说明 |
举例 |
{m} |
表达式匹配m次 |
“\d{3}”相当于“\d\d\d ” “(abc){2}”相当于“abcabc” |
{m,n} |
表达式匹配最少m次,最多n次 |
“\d{2,3}”可以匹配“12”或“321”等2到3位的数字 |
{m,} |
表达式至少匹配m次 |
“[a-z]{8,}”表示至少8位以上的字母 |
? |
表达式匹配0次或1次,相当于{0,1} |
“ab?”可以匹配“a”或“ab” |
* |
表达式匹配0次或任意多次,相当于{0,} |
“<[^>]*>”中“[^>]*”表示0个或任意多个不是“>”的字符 |
+ |
表达式匹配1次或意多次,至少1次,相当于{1,} |
“\d\s+\d”表示两个数字中间,至少有一个以上的空白字符 |
注意:在不是动态生成的正则表达式中,不要出现“{1}”这样的量词,如“\w{1}”在结果上等价于“\w”,但是会降低匹配效率和可读性,属于画蛇添足的做法
3.(?<content>.+?) 这里将子表达式.+?匹配的内容保存到以content命名的组里
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或手动命名的组里,以供后面引用。
表达式 |
说明 |
(Expression) |
普通捕获组,将子表达式Expression匹配的内容保存到以数字编号的组里 |
(?<name> Expression) |
命名捕获组,将子表达式Expression匹配的内容保存到以name命名的组里 |
普通捕获组(在不产生歧义的情况下,简称捕获组)是以数字进行编号的,编号规则是以“(”从左到右出现的顺序,从1开始进行编号。通常情况下,编号为0的组表示整个表达式匹配的内容。
命名捕获组可以通过捕获组名,而不是序号对捕获内容进行引用,提供了更便捷的引用方式,不用关注捕获组的序号,也不用担心表达式部分变更会导致引用错误的捕获组。
4.(最后一个问号用的是非贪婪模式)
标准量词修饰的子表达式,在可匹配可不匹配的情况下,总会先尝试进行匹配,称这种方式为匹配优先,或者贪婪模式。此前介绍的一些量词,“{m}”、“{m,n}”、“{m,}”、“?”、“*”和“+”都是匹配优先的。
一些NFA正则引擎支持忽略优先量词,也就是在标准量词后加一个“?”,此时,在可匹配可不匹配的情况下,总会先忽略匹配,只有在由忽略优先量词修饰的子表达式,必须进行匹配才能使整个表达式匹配成功时,才会进行匹配,称这种方式为忽略优先,或者非贪婪模式。忽略优先量词包括“{m}?”、“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。
举例:
源字符串:<div>aaa</div><div>bbb</div>
正则表达式1:<div>.*</div> 匹配结果:<div>aaa</div><div>bbb</div>
正则表达式2:<div>.*?</div> 匹配结果:<div>aaa</div> 再次匹配下一个时,可以得到第二个 "<div>bbb</div>"。