日期:2014-05-19  浏览次数:20687 次

关于c#正则表达式的几个问题
我想用正则表达式写一个从网叶的源文件中提取出来类似下面的字符串:
http://mil.eastday.com/m/20070117/images/00853307.jpg
http://image.mop.com/js/bq/p/2006/0930/15_1_1767_8_52_20060930174611.jpg
http://image2.sina.com.cn/jc/p/2007-02-01/U1335P27T1D429475F3DT20070201075646.jpg

我自己试了很多次都不行:
1,我这样写Regex   reg   =   new   Regex( "http://.+?\\.jpg "),匹配出来的结果含有下面的情况http://imgnews.baidu.com/i?ct=520093696&z=0&tn=baiduimagenewsdetail&word=%CB%D52
7&in=4&cl=3&lm=-1&pn=3&rn=1 "   target= "_blank "> <img   src= "http://imgnews.baidu.com/
it?u=1169369768,2933688088 "   border= "0 "> </a> <br> <span   style=line-height:24px> <FON
T   color=#6f6f6f   size=1> 2006-12-30   10:42       </font> </span> <br> <span   style=line-hei
ght:24px> <a   href= "http://imgnews.baidu.com/ir?t=1&u=http://cimg2.163.com/cnews/2
006/7/3/20060703115204befbf.jpg
然后我把改成这样Regex( "http://.+?[^(http)].+?\\.jpg ")结果还是cpu使用率直接100%,希望高手能够指出其中原因

2,我以前的时候用java写的,运行都好着,
Matcher   m   =   Pattern.compile( "http://((\\w)+|/|\\.)+jpg ").matcher(total);
我把它直接改成这样Regex   reg   =   new   Regex( "http://((\\w)+|/|\\.)+jpg ")和刚才一样cpu使用率100%,不知道什么原因.
3,后来我又改成这样Regex   reg   =   new   Regex( "http://((\\w)+|/|_|-|\|\\.)+\\.jpg ")结果一个都没有匹配上,不知道什么原因.


希望高手能够大概解释一下上面的我为什么错了还有应该怎么样正确的表达?

------解决方案--------------------
Regex reg = new Regex( "http://[^ " "]*?\\.jpg ")

------解决方案--------------------
程序中,在 " "中用 " "对 "进行转义,就如同用\\对\转义一样


------解决方案--------------------
Regex reg = new Regex(@ "http://[^ " "]*?\\.jpg ")
------解决方案--------------------
测试过

@ "http://[\w\+\-/\.]*\.jpg[\s\ " "]* "
------解决方案--------------------
@ "http\:\//[^ " "]*?\.jpg "

测试通过
------解决方案--------------------
@ "http://[\w\+\-/\.]*\.jpg[\s\ " "]* "

http:// 以后字母,+号 -号 \号 中的任意个 "* " 循环0次到n次 [\s\ " "]* 同样\s 代表空格 " " 代表 " 这两个循环 0 到n次..