2016-01-28 66 views
2

對於RegExp是如何工作的,我略感混淆。我很高興使用它來搜索字符串,使用記事本++,但是我現在試圖通過VBScript中的字符串進行搜索,並且在記事本++中工作的RegExps似乎與VBScript不兼容。我錯誤地推測,正則表達式是一種標準。無論如何。VBScript正則表達式不匹配

我試圖通過搜索的字符串是:
"kcabllaCsrevirD -) 0x0 = TLUSERH ('FNI.TRWTS\049BE47424A6-2898-65A4-3538-602212F0\#\$1#40C0010B$gkPrevirD_O_\10RPAFJUOS\\' egakcaP revirD 8202=DI

我試圖找出:
FNI.TRWTS\

使用記事本++,並試圖按照如語法時纔在this MSDN article我描述已經拿出:
.*?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 
+0

字符串中已知什麼? 'fni.'?順便說一句,哪個標籤是正確的:vb.net或vbscript?請顯示你的代碼。 –

+0

只需使用fni \ .. *?\\與忽略大小寫標誌。 – sln

+0

我不認爲我可以使用fni \ .. *?\\,隨着字符串的進一步發生,值可能會再次出現。我現在要添加完整的代碼 –

回答

2

注意,記事本++使用升壓正則表達式庫,它是非常強大的,和VBScript使用類似於JavaScript的支持非常古老的正則表達式庫(這是非常有限的相比提升)。但是,非常基本的模式也是一樣的。

要匹配字符串開始fni.\結束,您可以使用

\bfni\.[^\\]*\\ 

regex demo

\b力量fni是一個完整的單詞。 [^\\]匹配任何字符,但\,*匹配零次或多次匹配,並且\\匹配一個\

RegExp.Execute返回全部匹配如果您設置objRegEx2.Global = True,所以沒有設置循環的要點。

+0

它現在可以工作嗎?沒有'dism.log'文件我不知道如何提供更多幫助。 –

+1

是這個查詢現在可以使用。在我遇到的正則表達式問題上,我也意外地使用了測試方法而不是執行 - 這當然沒有幫助。 –