Я немного смущен относительно того, как работает RegExp. Я очень рад использовать его для поиска строк, используя что-то вроде блокнота ++, однако теперь я пытаюсь выполнить поиск по строке в VBScript, а RegExps, которые работают в блокноте ++, не совместимы с VBScript. Я неправильно предполагал, что регулярное выражение является стандартом. Так или иначе.VBScript RegEx не соответствует
Строка Я пытаюсь искать через это:
"kcabllaCsrevirD -) 0x0 = TLUSERH ('FNI.TRWTS\049BE47424A6-2898-65A4-3538-602212F0\#\$1#40C0010B$gkPrevirD_O_\10RPAFJUOS\\' egakcaP revirD 8202=DI
Я пытаюсь определить:
FNI.TRWTS\
Используя Notepad ++, и пытается следовать sytax, как описано в this MSDN article I «придумали»:
.*?fni\..*?\\
Может ли кто-нибудь указать мне правильное направление здесь? У меня есть другие регулярные выражения, работающие в VB, так что я счастлив, что мой VB в порядке.
Для фона на струне - я перевернул строку текста из журнала DISM и пытаюсь извлечь имя драйвера, поэтому, чтобы выбрать fni.*
, а затем отмените его на *.inf
. Причина, по которой я делаю это так, пока я могу получить регулярные выражения для поиска не жадных (.*?
) Я не могу найти способ сопоставления последнего в первую очередь.
Set objFso = CreateObject("Scripting.FileSystemObject")
Set TxtDismLog = objFSO.GetFile("C:\Windows\SysWow64\CCM\Logs\dism.log").OpenAsTextStream(1,-2)
Set TxtDriverOutput = objFSO.CreateTextFile("C:\Program Files\Sam\drivers.log", 8, True)
Set objRegEx = CreateObject("VBScript.RegExp")
Set objRegEx2 = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "Found \d driver package"
objRegEx2.Global = True
objRegEx2.IgnoreCase = True
objRegEx2.Pattern = "\bfni\.[^\\]*\\"
txtDriverOutput.WriteLine Now() & Chr(32) & "Begin DISM Driver Scan"
Do While TxtDismLog.AtEndOfStream <> True
txtline = txtDismLog.ReadLine
If objRegEx.Test(txtline) Then
h = InStr(txtline,"Found")
i = Mid(txtline,h+6,1)
Do While i <> 0
i = i - 1
txtline = txtDismLog.ReadLine
txtlinebwd = StrReverse(txtline)
regfindbwd = objRegEx2.Execute(txtlinebwd)
regfind = StrReverse(regfindbwd)
txtDriverOutput.WriteLine regfind
Loop
End If
Loop
Что известно в строке? 'Fni.'? BTW, какой тег правильный: vb.net или vbscript? Пожалуйста, покажите свой код. –
Просто используйте fni \ .. *? \\ с флагом игнорирования. – sln
Я не думаю, что могу использовать fni \ .. *? \\, так как далее через строку значение может повториться. Я добавлю полный код сейчас –