开发者

match parentheses in powershell using regex

开发者 https://www.devze.com 2023-03-07 13:19 出处:网络
I\'m trying to check for invalid filenames.I want a filename to only contain lowercase, uppercase, numbers, spaces, periods, underscores, dashes and parentheses.I\'ve tried this reg开发者_StackOverflo

I'm trying to check for invalid filenames. I want a filename to only contain lowercase, uppercase, numbers, spaces, periods, underscores, dashes and parentheses. I've tried this reg开发者_StackOverflow中文版ex:

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

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

I get this error:

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

What am I doing wrong?


Try to move the - to the end of the character class

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

in the middle of a character class it needs to be escaped otherwise it defines a range


You can replace a-zA-Z0-9 and _ with \w.

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

From get-help about_Regular_Expressions:

\w

Matches any word character. Equivalent to the Unicode character categories [\p{Ll} \p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]. If ECMAScript-compliant behavior is specified with the ECMAScript option, \w is equivalent to [a-zA-Z_0-9].


I guess, add a backslash before the lone hyphen:

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

精彩评论

暂无评论...
验证码 换一张
取 消