使用正则表达式匹配powershell中的括号

时间:2011-05-19 13:49:09

标签: regex 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"

我做错了什么?

3 个答案:

答案 0 :(得分:6)

尝试将-移动到角色类的末尾

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

在字符类的中间需要进行转义,否则它会定义一个范围

答案 1 :(得分:2)

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

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

来自get-help about_Regular_Expressions:

\ W

匹配任何单词字符。 相当于Unicode 字符类别[\ p {Ll} \ p {路} \ p {LT} \ p {螺} \ p {钕} \ p {PC}]。 如果符合ECMAScript的行为 使用ECMAScript指定 选项,\ w等同于 [A-ZA-Z_0-9]。

答案 2 :(得分:1)

我猜,在单独的连字符前添加一个反斜杠:

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