2

この正規表現を使用できます:

^(?!^(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:?"||/?

明らかな何かが欠けている場合は、事前にお詫び申し上げます。ご協力いただきありがとうございます。

4

1 に答える 1

1

この正規表現はあなたが望むことをすると思います:

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

Debuggexでどのように動作するかを確認できます。アイデアは、拒否する正規表現の各部分を「反転」することです。

于 2013-03-28T17:33:03.063 に答える