要求
1、匹配rem与'2种注释(可分开写2条以匹配不同的)。
2、只匹配<%%>程序段中的注释,不匹配普通文本中的内容
3、注释出现的位置可随意,且须考虑程序双引号中可能出现的'或rem

解决方案 »

  1.   

    好久没来CSDN了 露个脸  接分走人
      

  2.   

    呵呵 这个简单
    rule1 = &"<%(?<aspscript>[\s\S]*?)%>";
    rule2 = &"(?:\n|^)(?:rem|')\s[^\n]*";MatchCollection matchs = Regex.Matches(查询字符串,rule1,RegexOptions.IgnoreCase);
    foreach(Match aa in matchs)
    {
        MatchCollection matchs1 = Regex.Matches(aa.Group["aspscript"].Value,rule2,RegexOptions.IgnoreCase);
        foreach(Match bb in matchs1)
        {
            xxx += bb.Value;//bb.Value就是注释行
        }
    }
      

  3.   

    rule1 = &"<%(?<aspscript>[\s\S]*?)%>";请问:前面那个&是起什么作用的?
      

  4.   

    TO:gzdiablo() 以前考虑过类似方法,即循环获取。这种方式匹配出字符应该没问题,但随之产生另一个问题:得到了字符,但要在原文中进行替换、获取等操作时不便定位。比如原文为:
    'abc
    <%'abc%>
    那么我得到“'abc”之后在原文中需再次判断。不知如何解决?
      

  5.   

    JavaScript语法着色引擎(demo及下载)
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=1981&TypeID=31进入上面链接页面后,左边的相关文章中,收录了一些关于语法高亮的文章。楼主可以参考一下。
      

  6.   

    chaney(chaney) ( ) 
    不好意思看不懂你的意思
    唉 病还没好好难受....
      

  7.   

    我现在采用的是用了几个表达式分组来得到注释或非注释,那么比如我要替换注释,只要用REGEX的replace方法得到对应组($1$2)就行,例如,在下面文字中替换:
    'abc
    <%'abc%>
    就用: System.Text.RegularExpressions.Regex.Replace("上文变量","(<%)('.*?)(%>)","");但如果只是得到注释的字符串,则替换时不一定精确。即使得到了:“'abc”,但替换时可能把非注释的也删除
      

  8.   

    To: chjlcn(http://www.chenjiliang.com)
    相对而言,C# JS的注释要容易匹配很多,因为//后面就作注释了,而ASP里则不然,这个就增加了不少麻烦
      

  9.   

    不好意思 要不是大病中早就写好了 其实匹配asp的单引号很简单
    首先使用
    rule = @"<%(?<aspscript>[\s\S]*?)%>";提取所有的asp脚本段的内容再遍历他们进行分析.
    遍历时用这个表达式rule = "(?:(?<=\\n|^)rem\\s|(?<=(?:\\n|^)[^'\"\n]*(?(\")\".*?\".*?|))')([^\\n]*)";
    Match.Value 就是带注释符的注释段
    Group["1"].Value 就是注释内容如果想替换的话直接replace就可以了
    例如:
    Regex.Replace(字符串,表达式,"<span class="REM">$1</span>",RegexOptions.IgnoreCase);要我解释第二条表达式的话再开50分 嘿嘿~~~~~唉病得好难受......
      

  10.   

    把现在的式子修改了一下,应该可以满足需要了。有一点遗憾的是?<=只能在C#里用吧?
    "要我解释第二条表达式的话"你指的第二条是?50分相对而言确实不多。
      

  11.   

    <script language="javascript">
    function window.onload()
    {
    var searchstr = "rem sakjdhfkajsdhf\n skdjhfakshafksdjf 'ashdkfjhsdkjf\n  rem 123456789";
    re = /(?!(\n(?:[^'"\n]*(".*?".*?|))*))((?:rem\s|')[^\n]*)/g;
    var temparr = searchstr.match(re);
    for(var i=0;i<temparr.length;i++)
    {
    searchstr = searchstr.replace(temparr[i],"<span style='color:#bbbbbb'>" + temparr[i] + "</span>");
    }
    document.body.innerHTML = searchstr.replace(/\n/g,"<br>");
    }
    </script>
    javascript脚本的替换 自己感觉怪怪的....
      

  12.   

    现在用的C#的方式:@"(?<=(?:\n|^)[^'""\n]*(?("")"".*?"".*?|))((rem\s|')[^'\n]*)"
    但似乎仍有不便(JS的方法也有些问题),比如处理如下:
    <%=abc%>
    '不是注释
    <%dim str1 '注释1%>'也不是注释<%
    dim str2 
    '注释2%>
    '也不是注释
    <%
    '注释3
    a="abc'123'ddd"
    dim str3 '注释4
    '注释5'注释6
    %>
      

  13.   

    <%=abc%>
    '不是注释
    <%dim str1 '注释1%>'也不是注释<%
    dim str2 
    '注释2%>
    '也不是注释
    <%
    rem 注释3
    "rem 不是注释3"
    a="abc'123'ddd" : b="bb' rem dd"
    dim str3 '注释4
    '注释5'注释6
    %>
      

  14.   

    javascript..............这个是第二步的匹配 还有第一步的没提出来
    给你个完整的<script language="javascript">
    function window.onload()
    {
    re1 = /(?!(\n(?:[^'"\n]*(".*?".*?|))*))((?:rem\s|')[^\n]*)/g;
    var re = /<%([\s\S]*?)%>/g;
    var tempstr = "<%'laksdjflkasjdflksadjf%>\n<%rem askjdhfaskjdhfksajdf%><%\nsadkjfhsadkf' askdhfaksjdfh\nrem sadkjfhaskjdfh%>";
    while(re.exec(tempstr)!=null)
    {
    searchstr = RegExp.$1;
    var temparr = searchstr.match(re1);
    for(var i=0;i<temparr.length;i++)
    {
    searchstr = searchstr.replace(temparr[i],"<span style='color:#bbbbbb'>" + temparr[i] + "</span>");
    }
    document.body.innerHTML += searchstr.replace(/\n/g,"<br>");
    }
    }
    </script>