对于Exchange Online规则,我试图在PowerShell中创建一个匹配(-match
)不以'.pdf'结尾的情况的正则表达式。遗憾的是,我对正则表达式还没有足够的经验。我正在使用以下正则表达式测试站点进行测试。
似乎与从PowerShell regex获得的输出匹配。
我已经尝试了以下方法:.?[^\.pdf]$
。
这是我得到的输出:
"test.txt" -match '.?[^\.pdf]$'
→正确(这就是我想要的)"test.docx -match '.?[^\.pdf]$'
→正确(这就是我想要的)"test.pdf.txt -match '.?[^\.pdf]$'
→正确(这就是我想要的)"test.pdf" -match '.?[^\.pdf]$'
→错误(这就是我想要的)使用以下示例开始失败:
"test.pdd" -match '.?[^\.pdf]$'
→错误(这不是我想要的)"test.pdx" -match '.?[^\.pdf]$'
→错误(这不是我想要的)我也尝试过类似'.?(\.[^pP][^dD][^fF])$'
的许多事情,但是我遇到了类似的结果。
答案 0 :(得分:2)
更简单的方法是使用-notmatch
运算符而不是-match
。这使您只需编写
$s -notmatch '\.pdf$'
或者,您也可以将-notlike
与通配符一起使用:
$s -notlike '*.pdf'
答案 1 :(得分:0)
要拒绝仅以.pdf
结尾的匹配项,可以使用此正则表达式,
^(?!.*\.pdf$).*$
(?!.*\.pdf$)
前瞻性否定,如果字符串以.pdf
结尾则拒绝匹配
这是命令的结果,
PS C:\Users\user> "test.txt" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.docx" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdf.txt" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdf" -match '^(?!.*\.pdf$).*$'
False
PS C:\Users\user> "test.pdd" -match '^(?!.*\.pdf$).*$'
True
PS C:\Users\user> "test.pdx" -match '^(?!.*\.pdf$).*$'
True
您使用否定字符[^.pdf]
仅适用于否定字符串中的某些字符,并且不能拒绝像pdf
这样的字符序列,您需要以一种否定的眼光看待我用过。
.?
表示任何零或一次字符,都不是您想要的正确字符。