当前位置: 代码迷 >> ASP.NET >> C#正则怎么只会一个()内的数据
  详细解决方案

C#正则怎么只会一个()内的数据

热度:4716   发布时间:2013-02-25 00:00:00.0
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
  相关解决方案