PowerShell实例之正则表达式查找字符串

发布时间:2020-06-29编辑:脚本学堂
在PowerShell中使用-match运算符加正则表达式,进行字符串的搜索,match运算符,后面加上正则表达式,可以对字符串进行正则匹配查找,需要的朋友参考下。

在powershell中,match运算符,后面加上正则表达式,可以对字符串进行正则匹配查找。

正则表达式功能强大,用于查找字符串时方便快捷。

match查找的结果也是布尔值类型,即True或False,表示匹配成功或匹配失败。

例子:
“123”是以“1”开头
 

PS C:Usersspaybow> "123" -match "^1.*"
True

“123”是以“1”开头,以“3”结尾
 

PS C:Usersspaybow> "123" -match "^1.*3$"
True

“123”是由三个数字组成
 

PS C:Usersspaybow> "123" -match "d{3}"
True

附,powershell编写正则表达式的方法,地址:http://technet.microsoft.com/zh-cn/magazine/2007.11.powershell.aspx

进行简单匹配
Windows PowerShell –match 运算符将字符串与正则表达式或 Regex 进行比较,然后根据该字符串是否与 Regex 匹配返回 True 或者 False。简单的 regex 甚至不需要包含任何特殊语法,有文字字符即可。例如:
 

 "Microsoft" –match "soft"
"Software" –match "soft"
"Computers" –match "soft"
 

在 Windows PowerShell 中运行时,前两个表达式返回 True,第三个返回 False。在每个表达式中,字符串后均跟 –match 运算符,然后是 regex。默认情况下,regex 将在字符串中浮动查找匹配项。在 Software 和 Microsoft 中均可找到“soft”字符,但位置不同。另请注意:默认情况下,regex 不区分大小写,所以在“Software”中可找到“soft”,尽管 S 为大写字母。
但如果需要,可使用另一个不同的运算符 –cmatch 进行区分大小写的 regex 比较,如下所示:
 "Software" –cmatch "soft"
由于在区分大小写比较中,字符串“soft”与“Software”不匹配,所以该表达式返回 False。请注意:尽管 –match 是默认行为,但也可选择使用 –imatch 运算符显式表示不区分大小写。

通配符和重复字符
regex 可包含若干通配符字符。例如,句点可与一个任意字符实例匹配。问号可与零个或一个任意字符实例匹配。示例如下:
 

 "Don" –match "D.n" (True)
"Dn" –match "D.n" (False)
"Don" –match "D?n" (True)
"Dn" –match "D?n" (True)
 

在第一个表达式中,句点正好代表一个字符,所以匹配结果为 True。在第二个表达式中,句点未找到需要包含在其中的字符,所以匹配结果为 False。第三个和第四个表达式中的问号可匹配一个未知字符或者不与任何字符匹配。最后,在第四个示例中,由于“D”和“n”均存在并且二者之间没有字符,所以该匹配结果为 True。因此,问号可视为代表可选字符,所以即使在该位置没有出现任何字符,匹配结果仍为 True。
regex 还可将 * 和 + 符号视为重复字符。这些符号需要匹配某个字符或某些字符。* 可与零个或更多指定字符匹配,+ 可与一个或多个指定字符匹配。示例如下:
 follow
 

"DoDon" –match "Do*n" (True)
"Dn" -match "Do*n" (True)
"DoDon" -match "Do+n" (True)
"Dn" -match "Do+n" (False)
 

请注意:* 和 + 均可与“Do”匹配,而不只是与“o”匹配。这是因为这些重复字符被设计为可匹配一系列字符,而并不只是一个字符。
如果需要匹配句点、*、? 或 + 符号本身,应如何处理呢?可直接在它们前面加上一个反斜杠,作为 regex 转义符:
 "D.n" -match "D.n" (True)
注意:该转义符与 Windows PowerShell 转义符(反单引号)不同,但是也遵循行业标准 regex 语法。

字符类
字符类是通配符的更广泛形式,它代表整组字符。Windows PowerShell 可识别很多字符类。例如:
 

w 可匹配任何文字字符,即字母和数字。
s 可匹配任何空白字符,如制表符、空格等。
d 可匹配任何数字字符。
 

还有否定字符类:W 可匹配非文字字符,S 可匹配非空白字符,D 可匹配非数字字符。这些类可后跟 * 或 + 来表示接受多个匹配。

例子:
 

 "Shell" -match "w" (True)
"Shell" -match "w*" (True)