-
元素 描述 . 匹配除了换行符意外的任意字符 [^abc] 匹配除了包含在中括号的任意字符 [^a-z] 匹配除了包含在中括号指定区间字符的任意字符 [abc] 匹配括号中指定的任意一个字符 [a-z] 匹配括号中指定的任意区间中的任意一个字符 \a 响铃字符(ASCII 7) \c or \C 匹配ASCII 中的控制字符,例如Ctrl+C \d 匹配数字字符,等同于[0-9] \D 匹配数字以外的字符 \e Esc (ASCII 9) \f 换页符(ASCII 15) \n 换行符 \r 回车符 \s 白空格(空格,制表符,新行) \S 匹配白空格(空格,制表符,新行)意外的字符 \t 制表符 \uFFFF 匹配Unicode字符的十六进制代码FFFF。例如,欧元符号的代码20AC \v 匹配纵向制表符(ASCII 11) \w 匹配字符,数字和下划线 \W 匹配匹配字符,数字和下划线意外的字符 \xnn 匹配特殊字符,nn代表十六进制的ASCII 码 .* 匹配任意数量的字符(包括0个字符)查看全部
-
如果你需要更加精确的模式识别需要使用正则表达式。正则表达式提供了更加丰富的通配符。正因为如此,它可以更加详细的描述模式,正则表达式也因此稍显复杂。 使用下面的表格中列出的正则表达式元素,你可以非常精准的描述模式。这些正则表达式元素可以归为三大类。 字符:字符可以代表一个单独的字符,或者一个字符集合构成的字符串。 限定符:允许你在模式中决定字符或者字符串出现的频率。 定位符:允许你决定模式是否是一个独立的单词,或者出现的位置必须在句子的开头还是结尾。 正则表达式代表的模式一般由四种不同类型的字符构成。 文字字符:像”abc”确切地匹配”abc“字符串 转义字符:一些特殊的字符例如反斜杠,中括号,小括号在正则表达式中居于特殊的意义,所以如果要专门识别这些特殊字符需要转义字符反斜杠。就像”\[abc\]”可以识别”[abc]”。 预定义字符:这类字符类似占位符可以识别某一类字符。例如”\d”可以识别0-9的数字。 自定义通配符:包含在中括号中的通配符。例如”[a-d]”识别a,b,c,d之间的任意字符,如果要排除这些字符,可以使用”[^a-d]”。查看全部
-
上面表格中的通配符主要被使用在文件系统中,但是在字符串操作符-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地址,但是上面的模式匹配却能通过验证。查看全部
-
通配符 描述 示例 * 任意个任意字符,(包含零个字符) Dir *.txt ? 一个任意字符 Dir *.??t [xyz] 一个包含在指定枚举集合中的字符 Dir [abc]*.* [x-z] 一个包含在指定区间集合中的字符 Dir *[p-z].*查看全部
-
在验证用户的条目时,模式识别是必要并且常见的任务。例如判断用户的输入的字符串是否是一个合法的网络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].*查看全部
-
Concat()将多个字符串拼接成一个字符串。 Concat()工作起来类似字符串操作符“+”,类似而已,总有区别。 PS C:\> "Hello" + " " + "World!" Hello World! 区别在于第一个左表达式必选是一个String类型,否则,麻烦来了: PS C:\> (Get-Date) + "PStips.Net" 无法将“op_Addition”的参数“1”(其值为“PStips.Net”)转换为类型“System.TimeSpan”:“无法将值“PStips.Net”转换为类型“System.TimeSpan”。错误:“字符串未被识别为有效 的 TimeSpan。”” 所在位置 行:1 字符: 13 + (Get-Date) + <<<< "PStips.Net" + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument 此时可以使用: PS C:\> ""+(Get-Date) + "PStips.Net" 06/04/2013 00:54:27PStips.Net 或者: PS C:\> [string]::Concat((Get-Date),"PStips.Net") 2013/6/4 0:55:00PStips.Net查看全部
-
Join()方法曾经在上一部分演示Split()提到过,它可以将一个数组或者列表字符串合以指定分隔符并成一个字符串。例如自定义一个函数,移除多余的白空格。 1 2 3 4 5 function RemoveSpace([string]$text) { $private:array = $text.Split(" ", ` [StringSplitOptions]::RemoveEmptyEntries) [string]::Join(" ", $array) } PS C:\> RemoveSpace("PowerShell 中文博客的网址为 :http://www.pstips.net") PowerShell 中文博客的网址为 :http://www.pstips.net查看全部
-
使用String类命令: 之前已经讨论过,对象方法和类方法的区别了,再回顾一次。String对象衍生自string类 在控制台输入[String]::然后按Tab键会自动智能提示,这些方法就是String类命令。 Get-Member会返回所有string对象的方法,可以通过参数只返回静态方法,也就是string类命令。使用几率最高的自然Format方法,但是因为PowerShell中已经有了大书特书的-F操作符了,Format方法可以秒杀了。但是Join和Contac还是可以聊聊的。查看全部
-
从上面的输出可以发现Split有6种不同的调用方法,而之前可能更多的只使用过一个参数的方法。PowerShell在处理文本时,可能会碰到多个分隔符,而Split方法调用只须一次即可。 PS C:\> "http://www.pstips.net".split(":./") http www pstips net 中间有空白,咋整,能移除吗,StringSplitOptions轻装上阵: PS C:\> "http://www.pstips.net".split(":./",[StringSplitOptions]::RemoveEmptyEntries) http www pstips net 之前有一个小算法题,移除字符串中相邻的重复的空格。在不考虑效率的前提下,可以使用Split先分割,分割后再将得到的元素以指定分隔符拼接。但是拼接用到的Join方法,并不属于string对象,而属于String类,也正是下面要讲的。查看全部
-
从之前的章节中,我们知道PowerShell将一切存储在对象中,那这些对象中包含了一系列中的称之为方法的指令。默认文本存储在String对象中,它包含了许多非常有用的处理文本的命令。例如,要确定一个文件的扩展名,可以使用LastIndexOf()获取最后一个字符“.”的位置,继续使用Substring()获取扩展名子串。 PS> $path = "C:\prefs.js" PS> $path.Substring( $path.LastIndexOf(".")+1 ) Js 另外一条途径,使用Split方法,对文件的完整名称进行分割,得到一个字符串数组,取最后一个元素,PowerShell中可以通过索引-1来获取数组中最后一个元素。 PS> $path.Split(".")[-1] Js查看全部
-
在一个固定宽度和对齐格式中,显示输出多行文本,要求每一列的输出必选具有固定的宽度。格式化操作符可以设置固定宽度输出。 下面的例子通过DIR返回个目录的中的文件列表,然后通过循环输出,文件名和文件大小,因为文件的名字和大小都是不确定的,长度不一样,所以结果拥挤粗糙,可读性差。 PS > dir | ForEach-Object { "$($_.name) = $($_.Length) Bytes" } .android = Bytes .VirtualBox = Bytes CMB = Bytes Contacts = Bytes Desktop = Bytes Documents = Bytes Downloads = Bytes Favorites = Bytes funshion = Bytes Links = Bytes Podcasts = Bytes Roaming = Bytes Saved Games = Bytes Searches = Bytes SkyDrive = Bytes Tracing = Bytes Virtual Machines = Bytes VirtualBox VMs = Bytes a = 12022 Bytes a.csv = 986 Bytes a.ps1 = 18 Bytes a.txt = 946 Bytes funshion.ini = 6798 Bytes PUTTY.RND = 600 Bytes 下面固定列宽的结果,就显得可读性强了。要设置列宽可以将一个逗号放置在通配符与列宽编号的中间,负数设置右对齐,正数设置左对齐。 PS> dir | ForEach-Object { "{0,-20} = {1,10} Bytes" -f $_.name, $_.Length } Virtual Machines = Bytes VirtualBox VMs = Bytes a = 12022 Bytes查看全部
-
格式化操作符 -f 可以将数值插入到字符串,每一个通配符都有统一的结构。 {index[,alignment][:format]}: Index: 索引编号用来识别把那个值用来替换通配符。例如你可能使用了多个通配符,或者同一个通配符使用了多次,甚至多种格式。此时,索引编号是唯一能够识别那个值将用来替换。另外两个选项Alignment和Format则作为辅助条件。 Alignment: 正数和负数,可以指定目标值是否左对齐或者右对齐。还可以支持数值以指定的宽度显示,如果数值的实际宽度大于指定宽度,则忽略指定宽度。如果数值宽度小于指定宽度,剩余的部分会以空白填充,这一选项非常利于制表。 Format: 数值可以被格式化成许多不同的类型,下面会预览这些你可能会用到一些格式概要。 格式化语句比较特殊,大小写敏感,这和PowerShell中其它语句的使用稍有不同。下面举个例子: # 使用小写字母d:格式化 "Date: {0:d}" -f (Get-Date) Date: 2013/5/31 # 使用大写字母D:格式化 "Date: {0:D}" -f (Get-Date) Date: 2013年5月31查看全部
-
格式化操作符 –F 能够将一个字符串格式化为指定格式,左边是包含通配符的字符串,右边是待插入和替换的字符串。 “{0} diskettes per CD” -f (720mb/1.44mb) 500 diskettes per CD -F 右边的表达式必选放在圆括号中,作为一个整体,先进行计算,然后在格式化。否则可能会解析错误: PS > “{0} diskettes per CD” -f 720mb/1.44mb 数字常量无效: 754974720 diskettes per CD。 所在位置 行:1 字符: 33 + “{0} diskettes per CD” -f 720mb/ <<<< 1.44mb + CategoryInfo : InvalidOperation: (754974720 diskettes per CD:String) [], RuntimeException + FullyQualifiedErrorId : BadNumericConstant 可以在-F的左边放置多个字符串通配符,类似.NET中的String.Format方法。-F右边相应的值或表达式也须要使用逗号分隔。 “{0} {3} at {2}MB fit into one CD at {1}MB” -f (720mb/1.44mb), 720, 1.44, “diskettes” 500 diskettes at 1.44MB fit into one CD at 720MB查看全部
-
字符串操作符 操作符 描述 示例 * 代表一个字符串 “PsTips.Net” -like “*” + 合并两个字符串 “Power” + “Shell” -replace,-ireplace 替换字符串,大小写不敏感 “PsTips.Net” -replace “tip”,”1″ -creplace 替换字符串,大小写敏感 “PsTips.Net” -replace “Tip”,”1″ -eq, -ieq 验证是否相等,大小写不敏感 “Power” -eq “power” -ceq 验证是否相等,大小写敏感 “Power” -eq “Power” -like, -ilike 验证字符串包含关系,允许模式匹配,大小写不敏感 “PsTips.Net” -like “p*” -clike 验证字符串包含关系,允许模式匹配,大小写敏感 “PsTips.Net” – clike “P*” -notlike, -inotlike 验证字符串不包含关系,允许模式匹配,大小写不敏感 “PowerShell” -notlike “PS*” -cnotlike 验证字符串不包含关系,允许模式匹配,大小写敏感 “PowerShell” -cnotlike “PO*” -match,-imatch 验证模式匹配,大小写不敏感 “PowerShell” -match “P*” -cmatch 验证模式匹配,大小写敏感 “Hello” -match “[ao]” -notmatch, -inotmatch 验证模式不匹配,大小写不敏感 “Hello” -notmatch “[ao]” -cnotmatch 验证模式不匹配,大小写敏感 “Hello” -cnotmatch “[ao]”查看全部
-
所有的基本操作符形式都大同小异,要处理的数据位于操作符的左右两边,然后通过操作符建立连接。例如,你可以使用下面的语句将文本中指定的字符串替换成目标文本: “Hello Carl” -replace “Carl”, “Eddie” Hello Eddie -replace操作符有三种实现方式,其它文本操作符也类似地有三种实现方式,像-replace,-ireplace,-creplace,i前缀表示字符串大小写不敏感(insensitive),c前缀表示字符串大小写敏感(case sensitive)。 #下面的例子没有完成替换,因为当前大小写敏感: “Hello Carl” -creplace “carl”, “eddie” Hello Carl 第三类i前缀,表示大小写不敏感,和没有前缀的命令逻辑一样(PowerShell中默认的字符串比较是不区分大小写的,所以这里保持一致)。查看全部
举报
0/150
提交
取消