开发者

Return a vbscript regex match on multilines

I am using vbscript regex to find self-defined tags within a file.

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

Unfortunately, I am doing something wrong, so it will grab all of the text between two different tags. I know this is caused by not excluding "$]" between the pre and post tag, but I can't seem to find the right way to fix this. For example:

[$String1$]
useless te开发者_如何学JAVAxt
[$String2$]

returns

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

as one match.

I want to get

[$String1$]
[$String2$]

as two different matches.

Any help is appreciated.

Wade


The RegEx is greedy and will try to match as much as it can in one go.

For this kind of matching where you have a specific format, instead of matching everything until the closing tag, try matching NOT CLOSING TAG until closing tag. This will prevent the match from jumping to the end.

"\[\$[^\$]*\$\]"


Make the * quantifier lazy by adding a ?:

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

should work.

Or restrict what you allow to be matches between your delimiters:

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

will work as long as there is only one [$String$] section per line, and sections never span multiple lines;

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

checks before matching each character after a [$ that no $] follows there.


No need to use regex. try this. If your tags are always defined by [$...$]

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜