日期:2014-05-18  浏览次数:20946 次

c#中正则表达式的匹配问题
我想匹配<div id="XXX">和 YYY</a> 之间的内容

XXX可以是不定长的数字 比如2343或45945等等 YYY是几个中文 

我的正则表达式是这样的 (?<=<div\u0020id=\u0022\d+\u0022)[^YYY]+") 这个表达式刚好可以匹配出<div id="XXX">和YYY之间的内容。

我更改了下,变成这样 (?<=<div\u0020id=\u0022\d+\u0022)[^YYY</a>]+") 为什么就不行了呢?

\u0020 \u0022是空格和双引号

------解决方案--------------------
用正则表达式截取指定字符之间的内容,参考最后一段

或参考网页抓取
------解决方案--------------------
楼主首先要认识你一个错误,[^YYY]和[^YYY</a>]这种写法是不对的,[]字符组,能够匹配所包含的一系列字符中的任意一个。需要注意的是,[]虽然能匹配其中的任意一个字符,但匹配的结果只能是一个字符,不是多个。

同样的[^]排除型字符组,它所排除的也只是一些无序的字符,而不能排除一个有序字符序列,也就是字符串
要排除字符串,需要用到环视(?!</a>)

另外,要解决问题,你需要给出要匹配的字符串的具体的例子

参考
[ ] 字符组(Character Classes)

------解决方案--------------------
这样试试:

Regex.Matchs(html,@"(?is)(?<=<div\s+id=""\d+"">).*?(?=程序员</a></div>)));