2010-10-24 69 views
0

我正在使用vbscript正则表达式在文件中查找自定义标记。返回多行上的vbscript正则表达式匹配

"\[\$[\s,\S]*\$\]"

不幸的是,我做错了什么,所以它会抓住所有两个不同的标记之间的文本。我知道这是由于不在前后标签之间排除“$]”引起的,但似乎找不到解决此问题的正确方法。例如:

[$String1$] 
useless text 
[$String2$] 

返回

[$String1$] 
useless text 
[$String2$] 

作为一个匹配。

我想

[$String1$] 
[$String2$] 

两个不同的比赛。

任何帮助表示赞赏。

韦德

回答

1

正则表达式很贪婪,并会尝试尽可能匹配它。

对于这种匹配你有一个特定的格式,而不是匹配所有东西,直到结束标签,尝试匹配不结束标签,直到结束标签。这将阻止比赛跳到最后。

"\[\$[^\$]*\$\]" 
+0

+1就是这样,它像魅力一样工作,它可以在多行上工作。 – Wade73 2010-10-24 19:02:49

1

充分利用*量词懒加入了?

"\[\$[\s\S]*?\$\]" 

应该工作。

或限制什么让你做你的分隔符之间的匹配:

"\[\$.*\$\]" 

将工作,只要有每行只有一个[$String$]部分,部分从未跨越多行;没有$]如下有一个[$后的各字符匹配之前

"\[\$(?:(?!\$\])[\s\S])*\$\]" 

检查。

1

不需要使用正则表达式。尝试这个。如果您的标签总是由[$...$]

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFile=WScript.Arguments(0) 
Set objFile = objFS.OpenTextFile(strFile) 
strContent = objFile.ReadAll 
strContent = Split(strContent,"$]") 
For i=LBound(strContent) To UBound(strContent) 
    m = InStr(strContent(i) , "[$") 
    If m > 0 Then 
     WScript.Echo Mid(strContent(i),m) & "$]" 
    End If 
Next 
+1

工程,但我会坚持正则表达式的解决方案。谢谢。 – Wade73 2010-10-24 19:04:47