关于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]*?的效率高,且不易不现效率陷阱
关于贪婪模式和非贪婪模式,查一下相关资料吧