正则主要用来匹配英文比较适合,但是匹配中文则容易出现各种问题,我就遇到这样的麻烦事,搞了一天还是还点问题,拿出来请大家看看。
文本:
这时<a herf=xxx>发布信息</a>会员的的, 加入
这时<a herf=xxx> 发 布 信 息</a>会员的的, 加入
点击这<a herf=xxx>首页</a>里
这时<a herf=xxx>发布 广 告</a>会员的的, 加入
这时<a herf=xxx>发 布</a>会员的的, 加入
点击这<a herf=xxx>首页广告</a>里
要用一个正则表达式提取所有的链接,从<a 到</a>前提是链接文字只能是4种之一,第三行和第六行这种不要,除此之外的其他链接更不需要目前可以找到匹配链接的表达式,但是中间限定文字的部分始终调试不好。<a\s+[^>]+>\s*(.+)[(发\s*布\s*信\s*息)(发布广告)(发\s*布)][^<]<\/a>这个表达式可以匹配出大部分链接,但是有一个不相关的也匹配出来了,就是第六行,仔细看原来第六行里有一个:广告  两个字,这两个字和正则中的一个子表式达中的两个字一样,问题是我那个子表达式明明是4个汉字连在一起的啊,这不就是表示是这四个字必须连在一起吗?难道正则表达式还有专用的与表达式?好象没有吧,只有或表达式,也就是|,各位朋友看看到底是怎么回事啊。我都糊涂了,这该死的正则

解决方案 »

  1.   

    <a[^>]+>\s*\w*发\s*布.*</a>
      

  2.   

    楼上这个不管用,因为他能把其他英文链接也匹配出来了。
    例如这样的:
    <a href=bbb>ffff</a>
      

  3.   

    加个非贪婪StringCollection resultList = new StringCollection();
    try {
    Regex regexObj = new Regex(@"<a[^>]+>\s*\w*发\s*布.*?</a>", RegexOptions.Singleline);
    Match matchResult = regexObj.Match(subjectString);
    while (matchResult.Success) {
    resultList.Add(matchResult.Value);
    matchResult = matchResult.NextMatch();

    } catch (ArgumentException ex) {
    // Syntax error in the regular expression
    }