下面这段字符串
----------------------
你我他abc123<span class='highlight'>ac</span>你我他abc123<span class='highlight'>a</span>你我他abc123。 
--------------------------------------- 
要求可以匹配在 <span class='highlight'> * </span> 之外的任意字符,匹配的字符任意 
比如a,就匹配"你我他abc123"中的a;换成c,就匹配"你我他abc123"中的c
--------------------------------------前面我请教了一位朋友,但不能用用任意字符匹配,只能找出“你我他abc123”
(?<=</span>)[\w|\s]*|[\w|\s]*(?=<span),而且这个正则还有点问题,明明只有3个地方,我那个验证正则的工具提示有5个地方匹配,我测试了确实是5个,为什么呢?
---------------------------------------

解决方案 »

  1.   


    @"(?<=</span>)[\w\s]+|[\w\s]+(?=<span)"  
    -- 将那个正则中的“[\w|\s]”中的“|”去掉,这里起不到或的作用,将“[\w|\s]*”中的“*” 换成“+”
    但是我还没弄明白为什么[\w\s]是一个表示空格和单词集合的怎么能匹配出汉字??
      

  2.   

    参考http://bingning.net/VB/SOURCE/string/regexreplace.html一下。
      

  3.   


    \w 是单词字符,包括字母数字下划线,和[a-zA-Z0-9_]是一样的另: 不要再给我发消息了  一上午了 总是探出来有未读消息 打开又是空白的 什么也没有!!!!!
      

  4.   

    (?<!<span\s+class=['"]highlight['"][^>]*>)((?<=>|^)\w+(?=<|$|\s))在 .net 中, \w 是可以匹配中文字符的,除非设成 ECMAScript,在 JavaScript 中,只能匹配 [a-zA-Z0-9_]
      

  5.   


    是不是
    (? <! <span\s+class=['"]highlight['"][^>]*>)((? <=>|^)\w+(?= <|$|\s)) 
    中的$就是任意字符串呢?我将$换成a,说格式错误啊?
      

  6.   

    修正一下,上面的表达式无法匹配 "abc def" 的情形
    (?<!<span\s+class=['"]highlight['"][^>]*>)(?<=>|^)[^<]+(?=<|$)
      

  7.   

    为什么不把问题简单化,作两步获取呢?
    string str = "源字符串";
    str = Regex.Replace(str, "<span.*>.*</span>", "");
    //此时的str不在包含 <span>*</span>
      

  8.   


    这个是匹配不在span标签内的所有字符串, 很接近了而我的意思是匹配在上面前提下的某一任意字符串,比如我指定匹配"你我他“或者“ab”。
      

  9.   

    且这个正则还有点问题,明明只有3个地方,我那个验证正则的工具提示有5个地方匹配,我测试了确实是5个,为什么呢?C#正则的问题,Boost库mS可以只获取子捕获