[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] Powershell中的replace正则和[regex]正则有何区别?

如题,Powershell中的replace正则和[regex]正则有何区别?
  1. $a="abc-123-wer"
  2. $a -replace "(?im)\d+","test"
  3. $re=[regex]"(?im)\d+"
  4. $re.matches("abc-123-wer")|select-object -property value
复制代码
我想知道的是,[regex]比replace的正则究竟有哪些更强大的地方,比如其可以做到,后者无法做到?

本帖最后由 WHY 于 2017-8-20 14:59 编辑

一个是 PowerShell 内置的替换运算符,一个是 .NET Framework 中 System.Text.RegularExpressions.Regex 类的静态方法。

-replace 替换运算符一次性替换全部(global 全局标志为 True),Replace 方法可以替换其中的某一次或几次。
  1. ([regex]'(?i)a').Replace('aaaa', 'b', 1, 2) #替换 "aaaa" 中的 "a" 为 "b",替换1次,从第3个字符开始替换
复制代码
如果需要对捕获的子匹配调用其它函数方法,比如将子匹配转换大小写,-replace 替换运算符办不到,只能调用 Replace 方法。
这种办法是错误的:
  1. 'how are you' -replace '\b[a-z]', '$&'.ToUpper()
复制代码
这种办法是正确的:
  1. [regex]::Replace('how are you', '\b[a-z]', {param($a); $a.Groups[0].Value.ToUpper()})
复制代码
另外,.net 正则表达式中的一些选项,如 RightToLeft、ECMAScript、CultureInvariant 等不能用于 -replace 运算符,因为这些选项没有提供内联字符。
1

评分人数

TOP

[regex]只是一个声明的类型而已,表示这个变量是
正确声明方法应该是
[regex]$s='xxxx'
$s.GetType() -正则的表达式类型

TOP

返回列表