[Regex] :: Replace()和-replace有什么区别?

问题描述 投票:2回答:2

我理解.Replace()-replace之间的区别,但-replace[Regex]::Replace()是什么?

我测试了以下2个代码,但对我来说结果完全相同。

我还提到了PowerShell Cookbook(O'reilly),它说

([正则表达式]是)非常高级的正则表达式替换

我想知道什么[Regex]可以,但-replace不能。

$line = "Loosen the socket by turning it#counterclockwise."
$line = $line -Replace "([a-z])#([a-z])","`$1 `$2"
$line

# Loosen the socket by turning it counterclockwise.

$line.GetType()
# IsPublic IsSerial Name                                     BaseType
# -------- -------- ----                                     --------
# True     True     String                                   System.Object

$line2 = "Loosen the socket by turning it#counterclockwise."
$line2 = [Regex]::Replace($line3,"([a-z])#([a-z])","`$1 `$2")
$line2

# Loosen the socket by turning it counterclockwise.

$line2.GetType()
# IsPublic IsSerial Name                                     BaseType
# -------- -------- ----                                     --------
# True     True     String                                   System.Object
regex powershell replace
2个回答
2
投票

The Fish's helpful answer包含很好的指针,但让我对事物的框架有所不同,部分原因是Ansgar Wiechers的评论:

  • PowerShell的-replace operator是.NET [Regex]::Replace()方法的友好包装器。 鉴于PowerShell是基于.NET框架构建的,因此PowerShell以更简单,更高级的方式表现.NET功能是一种常见模式。
  • 默认行为的一个重要区别是-replace默认情况下是不区分大小写的,与PowerShell的行为一致。 使用变量-creplace进行区分大小写的替换。
  • -replace仅提供各种[Regex]::Replace()重载提供的功能的子集。 PowerShell Core v6.1.0 +中的功能差距已缩小,现在还通过传递给-replace的脚本块提供回调功能,这得益于Mathias R. Jessen的工作;例如。, '1 + 1 = 2' -replace '\d+', { [int] $_.Value * 2 }产生'2 + 2 = 4',相当于: [regex]::replace('1 + 1 = 2', '\d+', { param($match) [int] $match.Value * 2 })
  • 如果-replace对于给定的用例足够好,请使用它而不是[regex]::Replace()。 方法调用的语法与PowerShell的其他部分不同,并且在类型转换和代码的长期稳定性方面存在细微之处;因此,如果可行的话,通常最好坚持使用本机PowerShell功能(cmdlet和运算符)。 但是,如果-replace不提供您所需的功能,直接调用[regex]::Replace()是一个很好的高级选项;请注意,Replace()也作为实例方法存在,在这种情况下它提供了额外的功能 - 例如,limit the number of replacements的能力。

3
投票

-Replace是一个powershell运算符,用X替换X,不能配置为执行任何其他操作。

[Regex]是一个.NET类,它包含一个名为Replace的方法,并且有许多重载,可以配置和控制字符串的替换方式。

-replace可能在引擎盖下使用[Regex]::Replace

referenceRegex.Replace方法包含所有可以被称为的不同方式。

正则表达式中包含的methods and properties

© www.soinside.com 2019 - 2024. All rights reserved.