匹配ASP中注释的正则表达式怎么写??????????????? 要求1、匹配rem与'2种注释(可分开写2条以匹配不同的)。2、只匹配<%%>程序段中的注释,不匹配普通文本中的内容3、注释出现的位置可随意,且须考虑程序双引号中可能出现的'或rem 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好久没来CSDN了 露个脸 接分走人 呵呵 这个简单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就是注释行 }} rule1 = &"<%(?<aspscript>[\s\S]*?)%>";请问:前面那个&是起什么作用的? TO:gzdiablo() 以前考虑过类似方法,即循环获取。这种方式匹配出字符应该没问题,但随之产生另一个问题:得到了字符,但要在原文中进行替换、获取等操作时不便定位。比如原文为:'abc<%'abc%>那么我得到“'abc”之后在原文中需再次判断。不知如何解决? JavaScript语法着色引擎(demo及下载)http://www.chenjiliang.com/Article/View.aspx?ArticleID=1981&TypeID=31进入上面链接页面后,左边的相关文章中,收录了一些关于语法高亮的文章。楼主可以参考一下。 chaney(chaney) ( ) 不好意思看不懂你的意思唉 病还没好好难受.... 我现在采用的是用了几个表达式分组来得到注释或非注释,那么比如我要替换注释,只要用REGEX的replace方法得到对应组($1$2)就行,例如,在下面文字中替换:'abc<%'abc%>就用: System.Text.RegularExpressions.Regex.Replace("上文变量","(<%)('.*?)(%>)","");但如果只是得到注释的字符串,则替换时不一定精确。即使得到了:“'abc”,但替换时可能把非注释的也删除 To: chjlcn(http://www.chenjiliang.com)相对而言,C# JS的注释要容易匹配很多,因为//后面就作注释了,而ASP里则不然,这个就增加了不少麻烦 不好意思 要不是大病中早就写好了 其实匹配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分 嘿嘿~~~~~唉病得好难受...... 把现在的式子修改了一下,应该可以满足需要了。有一点遗憾的是?<=只能在C#里用吧?"要我解释第二条表达式的话"你指的第二条是?50分相对而言确实不多。 <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脚本的替换 自己感觉怪怪的.... 现在用的C#的方式:@"(?<=(?:\n|^)[^'""\n]*(?("")"".*?"".*?|))((rem\s|')[^'\n]*)"但似乎仍有不便(JS的方法也有些问题),比如处理如下:<%=abc%>'不是注释<%dim str1 '注释1%>'也不是注释<%dim str2 '注释2%>'也不是注释<%'注释3a="abc'123'ddd"dim str3 '注释4'注释5'注释6%> <%=abc%>'不是注释<%dim str1 '注释1%>'也不是注释<%dim str2 '注释2%>'也不是注释<%rem 注释3"rem 不是注释3"a="abc'123'ddd" : b="bb' rem dd"dim str3 '注释4'注释5'注释6%> 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> 求一个正则,抓取table C#中Webbrowser浏览多个网页时的问题 LISTVIEW 加亮显示 datagridview 排序问题 为什么排序摸样用处呢? 帮我看看吧 c#2005c/s发布的时候出现的问题,请高手解答!在线等 数据结构 哪里能下载到微软网上课堂系列讲座视频? 感觉学习C#就是学习.Net类库,所以只要.Net类库你弄熟悉了,C#你就是高手了~ 高分请教C#初学者的问题,谢谢大家! 请问除了微软的TTS发声引擎外,还有没有其他比较好的发声引擎呢? 一个COMBOBOX绑定的问题,在线等急!
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就是注释行
}
}
'abc
<%'abc%>
那么我得到“'abc”之后在原文中需再次判断。不知如何解决?
http://www.chenjiliang.com/Article/View.aspx?ArticleID=1981&TypeID=31进入上面链接页面后,左边的相关文章中,收录了一些关于语法高亮的文章。楼主可以参考一下。
不好意思看不懂你的意思
唉 病还没好好难受....
'abc
<%'abc%>
就用: System.Text.RegularExpressions.Regex.Replace("上文变量","(<%)('.*?)(%>)","");但如果只是得到注释的字符串,则替换时不一定精确。即使得到了:“'abc”,但替换时可能把非注释的也删除
相对而言,C# JS的注释要容易匹配很多,因为//后面就作注释了,而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分 嘿嘿~~~~~唉病得好难受......
"要我解释第二条表达式的话"你指的第二条是?50分相对而言确实不多。
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脚本的替换 自己感觉怪怪的....
但似乎仍有不便(JS的方法也有些问题),比如处理如下:
<%=abc%>
'不是注释
<%dim str1 '注释1%>'也不是注释<%
dim str2
'注释2%>
'也不是注释
<%
'注释3
a="abc'123'ddd"
dim str3 '注释4
'注释5'注释6
%>
'不是注释
<%dim str1 '注释1%>'也不是注释<%
dim str2
'注释2%>
'也不是注释
<%
rem 注释3
"rem 不是注释3"
a="abc'123'ddd" : b="bb' rem dd"
dim str3 '注释4
'注释5'注释6
%>
给你个完整的<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>