Возвратите регулярное выражение VBScript для нескольких строк - PullRequest
0 голосов
/ 24 октября 2010

Я использую регулярное выражение vbscript, чтобы найти теги, определенные в файле.

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

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

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

возвращает

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

как один матч.

Я хочу получить

[$String1$]
[$String2$]

как два разных совпадения.

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

Wade

Ответы [ 3 ]

1 голос
/ 24 октября 2010

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

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

"\[\$[^\$]*\$\]"
1 голос
/ 24 октября 2010

Нет необходимости использовать регулярные выражения.попробуй это.Если ваши теги всегда определены как [$...$]

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 голос
/ 24 октября 2010

Сделайте квантификатор * ленивым, добавив ?:

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

должно работать.

Или ограничьте то, что вы разрешаете совпадать между вашими разделителями:

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

будет работать до тех пор, пока в каждой строке имеется только один [$String$] раздел, а разделы никогда не занимают несколько строк;

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

проверяет перед сопоставлением каждый символ после [$, что нет$] следует там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...