首页 新闻 会员 周边 捐助

这个正则表达式怎么分析?

0
悬赏园豆:20 [已解决问题] 解决于 2010-05-08 14:48

(?<=(?i)<a\\s+[^>]*\\s*href=\"|'|\\s)[^>]+?(?=\"|'|\\s)(?#>[^>]+</a>)

上面的正则表达式是提取超链接的,不知道是什么原理,看了一下正则表达式的文章,还是不太懂,望高手帮忙分析一下!另外如果要同时提取文本和链接,即一次Match.Value为href后的链接,下一次Match.Value为链接文本该怎么改写这个表达式?

戴峻锋的主页 戴峻锋 | 初学一级 | 园豆:180
提问于:2010-05-07 09:31
< >
分享
最佳答案
0

1.解释正则

1.1) (?<=(?i)<a\\s+[^>]*\\s*href=\"|'|\\s) 以什么开头,以<a + 一些空格,非结束标记>的字符串 + href + 一个空格或者一个双引号或者一个单引号开头
解释:(?<=a)这个就会匹配上以字母a开头的字符串,并且去掉这个开头的字母a
比如:用a123456xyz能匹配上12345xyz.
1.2) ?(?=\"|'|\\s)(?#>[^>]+</a>) 以什么结尾,以一个空格或者一个双引号或者一个单引号开头 + 非结束标记>的字符串 + </a>结尾
解释:?(?=xyz)这个就会匹配上以字符串xyz结尾的字符串,并且去掉这个结尾的字符串xyz
比如:用a123456xyz能匹配上a12345.

1.3) [^>]+ 除了开头,除了结尾,需要得到的文本.
解释:这就意思就是除了标记结束符号意外的所有字符,匹配1个或多个.

最终的目的就是要把<a pro='xxxx' href = 'www.google.com'>link</a>这类链接中的href的值抠出来.
2.匹配方法

string html = "含超链接的HTML文本.";
MatchCollection mcHref
= System.Text.RegularExpressions.Regex.Matches(html,regexStr);
//然后再foreach循环就好了.一次全部匹配完.
System.Collections.ArrayList alResult = new System.Collections.ArrayList();
foreach (Match var in mcHref)
{
alResult.Add(var.Value);
}

 3.错误在所难免,要是解释得有问题,继续砸砖头.

收获园豆:20
三阶 | 小虾三级 |园豆:1636 | 2010-05-07 13:05
非常感谢!明白了不少,这个正则表达式是提取href的值,但是还不能做到提取文本啊,要是可以的话就可用你说的方法将其一个个的加入到数组中了.看来还要继续学习,改造它. 正则真强大!
戴峻锋 | 园豆:180 (初学一级) | 2010-05-07 16:46
用这一个(?<=<a\s+[^>]*\s*href=\"|')[^>]+?(?=\"|')可以匹配超链接,用(?<=>)[^<]+.[^</a>]这个可以匹配链接文本,为什么联合起来就匹配不了任何东西呢?怎样才能实现将二者都取出来啊?
戴峻锋 | 园豆:180 (初学一级) | 2010-05-07 21:41
@戴峻锋: 两个合起来不就是又要取以<a开头又要取<开头的,当然不行,你可以取两次嘛。
三阶 | 园豆:1636 (小虾三级) | 2010-05-08 12:35
这个到时可以,不过想一次就搞定呵呵。
戴峻锋 | 园豆:180 (初学一级) | 2010-05-08 14:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册