【问题标题】:match parentheses in powershell using regex使用正则表达式匹配powershell中的括号
【发布时间】:2011-05-19 13:49:08
【问题描述】:

我正在尝试检查无效的文件名。我希望文件名只包含小写、大写、数字、空格、句点、下划线、破折号和括号。我试过这个正则表达式:

$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"

我做错了什么?

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    尝试将-移动到字符类的末尾

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

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

    【讨论】:

      【解决方案2】:

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

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

      来自 get-help 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]。

      【讨论】:

      • 另外,您可能不需要 ^ 或 $,因为它们代表行/字符串的开头或行/字符串的结尾
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2015-06-23
        相关资源
        最近更新 更多