PowerShell 简单模式识别 1
在验证用户的条目时,模式识别是必要并且常见的任务。例如判断用户的输入的字符串是否是一个合法的网络IP地址,或者电子邮箱。有用并且高效的模式匹配需要一些能代表确切数字和字符的通配符。
许多年前,人们就发明了简单的模式匹配,一直沿用至今。
1
2
3
4
5
6
7
8
|
#列出当前目录中的文本文件 Dir *.txt # 列出系统目录中以‘n’或‘w’打头的文件 dir $env:windir \ [nw] *.*
# 列出文件后缀名以‘t’打头,并且后缀名只有三个字符的文件 Dir *.t?? # 列出文件中包含一个’e’到’z’之间任意字符的文件 dir *[e-z].* |
通配符 | 描述 | 示例 |
* | 任意个任意字符,(包含零个字符) | Dir *.txt |
? | 一个任意字符 | Dir *.??t |
[xyz] | 一个包含在指定枚举集合中的字符 | Dir [abc]*.* |
[x-z] | 一个包含在指定区间集合中的字符 | Dir *[p-z].* |
上面表格中的通配符主要被使用在文件系统中,但是在字符串操作符-like和-notlike 中也可以。例如通过下面的方式可以简单验证IP地址。
1
2
|
$ip = Read-Host "IP address"
If ( $ip -like "*.*.*.*" ) { "valid" } Else { "invalid" }
|
也可以简单验证电子邮件地址。
1
2
|
$email = ".@."
$email -like "*.*@*.*"
|
然而上面的例子也仅能验证一些低级错误,还不是很确切。例如a.b.c.d不是一个有效的IP地址,但是上面的模式匹配却能通过验证。