2011-05-19 126 views
4

我試圖檢查無效的文件名。我想要一個文件名只包含小寫,大寫,數字,空格,句點,下劃線,破折號和括號。我試過這個表達式:在PowerShell中使用正則表達式匹配括號

$regex = [regex]"^([a-zA-Z0-9\s\._-\)\(]+)$" 
$text = "hel()lo" 

if($text -notmatch $regex) 
{ 
    write-host 'not valid' 
} 

我得到這個錯誤:

Error: "parsing "^([a-zA-Z0-9\s\._-\)\(]+)$" - [x-y] range in reverse order" 

我在做什麼錯?

回答

6

嘗試將-移動到它需要一個字符類中間的字符類

^([a-zA-Z0-9\s\._\)\(-]+)$ 

月底另行逃脫它定義了一個範圍

1

我猜,加上一個反斜槓在連字符之前:

$regex = [regex]"^([a-zA-Z0-9\s\._\-\)\(]+)$" 
2

您可以用\ w替換a-zA-Z0-9和_。

$regex = [regex]"^([\w\s\.\-\(\)]+)$" 

從獲取幫助about_Regular_Expressions:

\ W

匹配所有文字字符。 等效於Unicode 字符類別[\ p {ll} \ p {Lu} \ p {Lt} \ p {Lo} \ p {Nd} \ p {Pc}]。 如果ECMAScript 選項指定ECMAScript兼容行爲 ,則\ w等效於 [a-zA-Z_0-9]。

+0

此外,您可能不需要^或$,因爲這些表示行/字符串的開始或行結束/字符串 – 2016-01-22 14:12:37