2013-03-28 34 views
2

我可以使用this regex更換用下劃線無效字符之前保存

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\"";|/]+$ 

在VBScript檢測無效的Windows文件名,而之前保存拒絕。我想通過用標準字符(如下劃線「_」)自動替換任何無效字符(或其繼承)來爲我的用戶添加一項附加服務。

因此,我需要拿出另一種模式,因爲據我所知VBscript的只提供替換,如果模式匹配的方法:

with getRGX() 
    .ignoreCase = TRUE 
    .global = TRUE 
    .pattern = <inputPattern> 
    <outputCleanfileName> = .Replace(<inputDirtyFileName>, < "_" >) 
end with 

我已經成功的最好拿出至今如下:

((PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?)?[\\?*:\"";|/]+ 

不幸的是,它攪亂與擴展:

INPUT = COM1:aAZB?":a|a|a/.txt? 
MATCH = COM1:?"||/.txt? 
EXPECTED = COM1:?"||/? 

如果我錯過了某些明顯的東西,我很抱歉,並感謝您提供的任何幫助。

+0

我想我可以更簡單一些,直到我找到正確的倒置的reged。像這樣的東西似乎現在適合我的需要: http://stackoverflow.com/questions/3885964/regex-to-replace-invalid-characters 如果任何人有適當的「倒置」正則表達式但是,我會成爲接受者。 再次感謝。 – Madscripter

+0

我可能會誤解這個問題。你想單獨選擇每個無效字符,還是試圖選擇整個文件名,如果它是無效的?我的答案解決了後者。 –

+0

首先,感謝您對此進行調查。我只是看了一下你的建議,似乎讓我誤解了自己。也許我應該編輯我最初的問題,但是我想用模式替換被模式檢測爲無效的任何字符(或字符組),因此將有效字符(或字符組)保留爲他們是(不匹配)。希望這可以消除混亂。在我上面的例子中,預期的匹配應該是:COM1:?「|| /? – Madscripter

回答

1

我想這正則表達式你想要做什麼:

(?:^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(?:\.(?=.)|$)|(?:([\x00-\x1f\\?*:\"";|/]))) 

你可以看到它是如何工作的Debuggex。這個想法是「倒置」拒絕正則表達式的每個部分。

+0

完美。我有「倒置拒絕正則表達式的每個部分」的想法,但仍然錯過了它的一些部分。再次感謝你。提供答覆。 – Madscripter

相關問題