2010-10-24 4 views
0

Я использую регулярное выражение vbscript для поиска самоопределяемых тегов внутри файла.Возвращает совпадение регулярных выражений vbscript на многостроках

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

К сожалению, я делаю что-то неправильно, поэтому он будет захватить весь текст между двумя различными метками. Я знаю, что это вызвано не исключением «$]» между тегом pre и post, но я не могу найти правильный способ исправить это. Например:

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

возвращает

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

в одном матче.

Я хочу, чтобы получить

[$String1$] 
[$String2$] 

как два разных матча.

Любая помощь приветствуется.

Wade

ответ

1

RegEx жадный и будет стараться соответствовать столько, сколько может за один раз.

Для такого соответствия, когда у вас есть определенный формат, вместо того, чтобы сопоставлять все до закрывающего тега, попробуйте сопоставить NOT CLOSING TAG до закрытия тега. Это предотвратит прыжок до конца.

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

+1 Это все, работает как шарм и работает на нескольких линиях. – Wade73

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

Смежные вопросы