首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于C#正则表达式的一个困惑解决办法

2012-01-10 
关于C#正则表达式的一个困惑表达式如下句:\s*a\s*href[^ ]*\W+clients1.htm[\s\S]* [\s\S]* /a在以

关于C#正则表达式的一个困惑
表达式如下句:
<\s*a\s*href[^ <> ]*\W+clients1.htm[\s\S]*> [\s\S]* </a>

在以下字符串中搜索
<a   href= "clients1.htm "> <span   class= "style16 "> Thomasnet </span> (美国1) </a> <br>
<a   href= "clients2.htm "> <span   class= "style16 "> Skf </span> (瑞典1) </a> <br>
<a   href= "clients3.htm "> <span   class= "style16 "> Rentalhomesplus </span> (美国2) </a> <br>
<a   href= "clients4.htm "> <span   class= "style16 "> Drilling </span> (美国3) </a> <br>
<a   href= "clients5.htm "> <span   class= "style16 "> Nwa </span> (美国4) </a> <br>
<a   href= "clients6.htm "> <span   class= "style16 "> Dunderdon </span> (瑞典2) </a> <br>
<a   href= "clients7.htm "> <span   class= "style16 "> Cingular   Wireless </span> (美国5) </a> <br>
<a   href= "clients8.htm "> <span   class= "style16 "> Sega </span> (美国6) </a>

得出结果为何是全部?
为何不是只到第一个 </a> 的内容?如下是我想要到得的:
<a   href= "clients1.htm "> <span   class= "style16 "> Thomasnet </span> (美国1) </a> <br>

请问如何修改我的表达式,从第一个a   href开始,到第一个 </a> 结束即可,只取这其中的内容?


[解决办法]
如果按你的写法,应该改为这样

<\s*a\s*href[^ <> ]*\W+clients1.htm[\s\S]*?> [\s\S]*? </a>

用非贪婪模式,而不用贪婪模式
[解决办法]
不过你的写法,前面那样写不好,一般来说,href=后可能为 '、 "或者直接接网址三种情况,可以这样写

<\s*a\s*href=([ ' "]?)clients1\.htm\1[^> ]*> [\s\S]*? </a>

.htm这里的.需要转义\.
之后用[^> ]*会比[\s\S]*?的效率高,且不易不现效率陷阱

关于贪婪模式和非贪婪模式,查一下相关资料吧

热点排行