2011-05-05 54 views
2

我有一些嚴重的問題,試圖讓我的正則表達式正常工作,試圖提取UNC路徑。我已經閱讀了無數的教程,指南,甚至在線正則表達式測試人員(他們似乎在工作)測試了我的正則表達式,但是仍然無法在我的代碼中使用它。但是,我可以讓它在PHP中工作。VBScript正則表達式問題

我正在使用PrimalScript來試圖看看出了什麼問題,以後再說。這裏是我當前的代碼我使用的:

Dim WSHShell, strString, nrMatches, myMatches 

Set WSHShell = CreateObject("WScript.Shell") 
Set myRegExp = New RegExp 
myRegExp.IgnoreCase = True 
myRegExp.Global = True 
' myRegExp.Pattern = "^\\\\(.*?)+\\(.*)*\s...\\(.*)*$" <-- Returns 1 match, the whole String 
' myRegExp.Pattern = "^\\\\(\w?)+\\(\w)*\s...\\(\w)*$" <-- Returns 0 matches 
' myRegExp.Pattern = "^\\\\(.*?)+\\\(.*)*\s...\\\(.*)*$" <-- Gives Syntax Error 
' myRegExp.Pattern = "^\\\\\\\\(.*?)+\\\(.*)*\s...\\\(.*)*$" <-- Gives Syntax Error 
' myRegExp.Pattern = "^\\\\(.*)\\(.*)\s\.\.\.\\(.*)?$" <-- Returns 1 match, the whole String 
myRegExp.Pattern = "^(.*)+\\(.*)+(\s\.\.\.\\(.*))?$" ' <-- Returns 1 match, the whole String 

strString = "\\domain.subnet.net\share1 ...\share2" 

Set myMatches = myRegExp.Execute(strString) 
nrMatches = myMatches.Count 
MsgBox "Found " & nrMatches & " Matches!", vbOKOnly, "Number of Matches" 
For Each myMatch In myMatches 
    MsgBox "Value: " & myMatch.Value, vbOKOnly, "Found Match" 
Next 
WScript.Quit 

的評論正則表達式的是什麼,我已經試過只是一小部分,這些是那些我有「最」 sucess用。吸引我眼球

的一件事是,而在PrimalScript調試,它基本上跟我說的參數 谷歌搜索就可以了myMatches.Item =無效的號碼給了我什麼,雖然,但也許這裏有人知道什麼參數來執行需要嗎? 如果有必要,我可以提供它的截圖,只是讓我知道。

謝謝,我會感謝任何指針或技巧,幫助我得到這個打算=]

回答

1

我不知道你在期待什麼。

是否在2場比賽中得到strString = "\\domain.subnet.net\share1 ...\share2"? (會... \ share2是一個有效的路徑嗎?)

如果有由空格分隔字符串中的唯一路徑,那麼你可以嘗試:

[^\s]+看到rubular

[\\\w.]+看到rubular

,或者如果它有從\\.

(?<=\A|\s)(?:\\|\.)[^\s]+看到Regexr(因爲rubular不支持看屁股)

UPDATE:

根據您的意見,我希望這會做你想要什麼:

^((?:\\|\.)[^\s]+)\\[^\\\s]+\s+\.{3}([^\s]*) 

Rubular

您會發現組1中的最後一個\以及後面的部分...在組2.所以要得到你的替代品,你只需要連接組1和組2。

+0

@Stema另一個澄清:股份也可能是多個深度,這意味着如果字符串我「\\ domain.subnet.net \ share1 \ share2 .. 。\ share3「,我想提取份額3並用它替換份額2。換句話說,目的是映射(在這種情況下)\\ domain.subnet.net \ share1 \ ** share2 **和\\ domain.subnet.net \ share1 \ ** share3 ** – Exodus 2011-05-06 09:26:50

+0

嘿@Stema,從我所瞭解的情況來看,VBScript不允許看起來落後(請參見http://www.regular-expressions.info/vbscript.html) - 這可能是什麼原因造成的?另外,你的第二個Regexr建議會引發我一個「正則表達式中的語法錯誤」。爲了澄清我的意圖,我需要重新組合這兩個股份。三個併發點(... \)表示直到最後一個文件夾的所有內容都應該相同。我認爲嘗試使用正則表達式來提取數據並操作它會容易得多。也許最好的辦法是分步實施? – Exodus 2011-05-06 09:28:02

+0

@Daniel,對不起,我沒有證實,閱讀VB ...我想到.net,這將支持看後面。然後在這裏試試[Rubular](http://www.rubular.com/r/ykN20h8FPZ)'(?:^ | \ s)((?:\\ | \。)[^ \ s] +)'。背後的觀點只是爲了避免這會導致結果。有了這個正則表達式,領先的空間也是匹配的,但我把你的路徑放到了第一個捕獲組中。我也替換了VBScript不支持的'\ A'。 – stema 2011-05-06 09:32:03

1

請問是這樣的幫助呢?

http://regexlib.com/REDetails.aspx?regexp_id=2396

他們似乎暗示

^[A-ZA-Z] \:\。 |^\\。

我也看到 : - |(\\ [ - \ d \ W \] +) INA谷歌搜索(<(\\ [\ d \ W \\ S] +)>?)。

+0

嗨@mikeY,讓我匹配\域,\ share1和\ share2。關閉,但還沒有。我會嘗試修改你的建議,看看它是否工作:) – Exodus 2011-05-06 10:49:58