日期:2014-05-16  浏览次数:20869 次

如何用正则表达式匹配这样的字符串

<%
sData="开头<!-- Begin --><!-- Begin --><!-- /End --><!-- Begin -->This is a content from X to Y.<!-- /End -->"

response.write "<div>"&Server.Htmlencode(sData)&"</div>"

Dim objRegExp,MyPattern,MatCount
Dim NewString
Set objRegExp=New RegExp '创建对象
objRegExp.IgnoreCase=True '是否忽略大小写 True False
objRegExp.Global=True '字符串中全局匹配 True False
objRegExp.MultiLine = False '是否多行 True False

MyPattern="<!-- Begin -->([^(Begin)]*)<!-- /End -->"
objRegExp.Pattern=MyPattern '正则表达式模式

Set MyMatches=objRegExp.Execute(sData)
MatCount=MyMatches.Count
response.write "<div>匹配到个数=["&MatCount&"]</div>"
For Each MyMatch In MyMatches
response.write "<div>项目["&Server.Htmlencode(MyMatch)&"]</div>"
Next

response.write "<hr/>"

sData=objRegExp.Replace(sData,"【被替换了】")

response.write "<div>"&Server.Htmlencode(sData)&"</div>"

%>



我想匹配<!-- Begin -->到<!-- /End -->之间的内容(内容不允许包含<!-- Begin-->)。 看原字符串,照理说是可以匹配出2个结果。
但是正则表达式中因为多了个^begin 所以后面那个匹配不到,被过滤了。
我的意图是想 过滤 含有(begin) 整个单词的字符串,而不是单个单词b,e,g,i,n

请问怎么改写正则表达式:
MyPattern="<!-- Begin -->([^(Begin)]*)<!-- /End -->"

用()括号括起来了,还是没用。奇怪。要怎么写?



------解决方案--------------------
 MyPattern="(\<\!\-\- Begin \-\-\>)(.*?)(<!-- /End -->)"
sData=objRegExp.Replace(sData,"$1[被替换了]$3")
直接这样不就好了么?
------解决方案--------------------
sData="开头<!-- Begin --><!-- Begin --><!-- /End --><!-- Begin -->This is a content from X to Y.<!-- /End -->"

response.write "<div>"&Server.Htmlencode(sData)&"</div>"

Dim objRegExp,MyPattern,MatCount
Dim NewString
Set objRegExp=New RegExp    '创建对象
objRegExp.IgnoreCase=True    '是否忽略大小写 True False
objRegExp.Global=True        '字符串中全局匹配 True False
objRegExp.MultiLine = False    '是否多行 True False

MyPattern="<!-- Begin -->((?:(?!<!-- Begin -->)[\d\D])*)<!-- /End -->"
objRegExp.Pattern=MyPattern        '正则表达式模式

Set MyMatches=objRegExp.Execute(sData)
MatCount=MyMatches.Count
response.write "<div>匹配到个数=["&MatCount&"]</div>"
For Each MyMatch In MyMatches
    response.write "<div>项目["&Server.Htmlencode(MyMatch)&"]</div>"
Next

response.write "