日期:2014-05-17  浏览次数:20394 次

C#正则如何只会一个()内的数据
(?is)(<div.class=\"c\".id=\"C_.?[^>])(.+?)(</a>)


我试着写了这么一个正则。。

反回的值都是
<div class="c" id="C_34502"><a href="/u/adfasdfas">-我爱小贝-</a>
<div class="c" id="C_34584"><a href="/u/adfa1511s">-我爱小贝-</a>
<div class="c" id="C_68492"><a href="/u/adfas465s">-我爱小贝-</a>


但是我只想要 -我爱小贝- 即第二个(.+?)里的内容,这个有办法吗?我想用修改正则

我看到(?<=<a)
这个?<=是啥意思, 还有 \1

请会点的能帮我解答一下吗?



------解决方案--------------------
(?<=<a)前面是<a的数据,也就是<a后面跟着的数据
/1分组的意思
------解决方案--------------------
(?<=<div\s+class="c"\s+id="C_.+[^>]><a\s+href=".*">)(.*?)(?=</a>)

这样遍历匹配结果就行了。

另外,(?<=exp) 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp

\1 是平衡组里的用法。
------解决方案--------------------
(?<=exp)
零宽断言的一种,也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。匹配exp后面的位置

\1则是一个反向引用,引用的正是捕获的第一组
具体参考http://manual.phpv.net/regular_expression.html