奇怪的正则表达式 求助!

gbh911 2012-03-29 11:58:45
用谷歌搜 金属手机 得到的htm部分打码如下:

<div class="med" id="res" role="main"> <div id="topstuff"> <div class="std stp">可直接输入手机号码来查它的归属地 [<a href=/intl/zh-CN/help/features.html#mobile>细节</a>]。</div> </div> <div id="search"> <h2 class="hd">搜索结果</h2> <div id="ires"> <ol eid="bYV0T4f3D--fiAfYz-3jDw" id="rso"><li class="g"><div class="vsc" pved="0CD8QkgowAA" bved="0CEAQkQo" sig="2W8"><h3 class="r"><a href="http://mobile.pconline.com.cn/guide/1005/2133758.html" target=_blank class=l onmousedown="return rwt(this,'','','','1','AFQjCNFeuwbmfUqu_phlSwP5Ep2OsdDcaQ','','0CEYQFjAA',null,event)">塑料外壳没质感潮人必选<em>金属手机</em>搜罗_手机导购 - 手机- 太平洋电脑网</a></h3><div class="s"><div class="f kv"><cite><span class=bc>mobile.pconline.com.cn › <a href="/url?url=http://mobile.pconline.com.cn/guide/&rct=j&sa=X&ei=bYV0T4f3D--fiAfYz-3jDw&ved=0CEQQ6QUoADAA&q=%E9%87%91%E5%B1%9E%E6%89%8B%E6%9C%BA&usg=AFQjCNFjgc8LU01Xv9xYdIIyi5zoS7B92w" target=_blank>手机导购</a></span></cite><span class="gl">

要捕获<h3 class="r"><a href="http://mobile.pconline.com.cn/guide/1005/2133758.html"中的网址。

我用表达式:<h3 class="r"><a href="(?<key>[^"]+)" 在正则表达式测试工具里可以。
但是在c#里得到的是="/url?url=http://mobile.pconline.com.cn/guide/&rct=j&sa=X&ei=bYV0T4f3D--fiAfYz-3jDw&ved=0CEQQ6QUoADAA&q=%E9%87%91%E5%B1%9E%E6%89%8B%E6%9C%BA&usg=AFQjCNFjgc8LU01Xv9xYdIIyi5zoS7B92w

我用:"><h3 class="r"><a href="(?<key>[^"]+)" 或 "><h3 class="r"><a href="(?<key>[^"]+)" target=_blank class=l onmousedown= 就捕获不到。

在MTracer正则表达式工具里面都可以捕获。

O(∩_∩)O谢谢
...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-03-30
  • 打赏
  • 举报
回复
(?is)<h3 class="r"><a href="(?<key>[^"]+)"\s*[^>]*>.*?</a>

在C#要这样写
(?is)<h3 class=""r""><a href=""(?<key>[^"]+)""\s*[^>]*>.*?</a>

取值 m.Group["key"].Value//http://mobile.pconline.com.cn/guide/1005/2133758.html
gbh911 2012-03-30
  • 打赏
  • 举报
回复
那空格发帖自动加上的 呵呵
EnForGrass 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

你的引号我是加上测试,原来这样的 用你的代码可以捕获的。
我用的集合:
string sourcestr = this.textBox1.Text;
string zz=@ "(?is) <h3 class= " "r " "> <a href= " "(? <key> [^ " "]+) " "\s*[^> ]*> .*? </a> ";
MatchCo……
[/Quote]
另外this.textBox1.Text+=mcc.Groups[ "key "].Value+ "| ";红色部分不要有空格
gbh911 2012-03-30
  • 打赏
  • 举报
回复
知道了,在程序里下载下来的htm和在浏览器查看源文件看到的(上面的)不一样。
谢了
gbh911 2012-03-30
  • 打赏
  • 举报
回复
你的引号我是加上测试,原来这样的 用你的代码可以捕获的。
我用的集合:
string sourcestr = this.textBox1.Text;
string zz=@"(?is)<h3 class=""r""><a href=""(?<key>[^""]+)""\s*[^>]*>.*?</a>";
MatchCollection mc = Regex.Matches(sourcestr,zz,RegexOptions.None);
this.textBox1.Text="";
foreach(Match mcc in mc)
{
this.textBox1.Text+=mcc.Groups["key"].Value+"|";
}

出来的值都带有/url?q=的 也就是匹配了别的

二个结果不一样,晕啊
EnForGrass 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

试过了,还是不对啊
用这个(?is)<h3 class=""r""><a href=""(?<key>[^""]+)""\s*[^>]*>.*?</a>还是不行
[/Quote]
不好意思,少写个引号(?is)<h3 class=""r""><a href=""(?<key>[^""]+)""\s*[^>]*>.*?</a>

string sourcestr = File.ReadAllText(@"C:\3.txt", Encoding.GetEncoding("GB2312"));
Regex regx = new Regex(@"(?is)<h3 class=""r""><a href=""(?<key>[^""]+)""\s*[^>]*>.*?</a>");
string ll = regx.Match(sourcestr).Groups["key"].Value;//http://mobile.pconline.com.cn/guide/1005/2133758.html
gbh911 2012-03-30
  • 打赏
  • 举报
回复
试过了,还是不对啊
用这个(?is)<h3 class=""r""><a href=""(?<key>[^""]+)""\s*[^>]*>.*?</a>还是不行

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧