powershell 不能在反向引用匹配上使用方法
powershell cannot use methods on backreference matches
我更努力地尝试即时转换大小写,但似乎 powershell 方法没有 运行 用于反向引用匹配下面的示例:
$a="string"
[regex]::replace( "$a",'(.)(.)',"$(''.toupper())$(''.tolower())" )
> string
$a -replace '(.)(.)',"$(''.toupper())$(''.tolower())"
> string
expected result
> StRiNg
不知道可不可以
您需要一个脚本块来调用 String class 方法。你可以有效地做你想做的事。对于 Windows PowerShell,您不能使用 -replace
运算符进行脚本块替换。不过,您可以在 PowerShell Core (v6+) 中执行此操作:
# Windows PowerShell
$a="string"
[regex]::Replace($a,'(.)(.)',{$args[0].Groups[1].Value.ToUpper()+$args[0].Groups[2].Value.ToLower()})
# PowerShell Core
$a="string"
$a -replace '(.)(.)',{$_.Groups[1].Value.ToUpper()+$_.Groups[2].Value.ToLower()}
请注意,脚本块替换可识别当前 MatchInfo
对象 ($_
)。使用 Replace()
方法,脚本块作为自动变量 $args
中的参数传递到 MatchInfo
对象中,除非您指定 param()
块。
我更努力地尝试即时转换大小写,但似乎 powershell 方法没有 运行 用于反向引用匹配下面的示例:
$a="string"
[regex]::replace( "$a",'(.)(.)',"$(''.toupper())$(''.tolower())" )
> string
$a -replace '(.)(.)',"$(''.toupper())$(''.tolower())"
> string
expected result
> StRiNg
不知道可不可以
您需要一个脚本块来调用 String class 方法。你可以有效地做你想做的事。对于 Windows PowerShell,您不能使用 -replace
运算符进行脚本块替换。不过,您可以在 PowerShell Core (v6+) 中执行此操作:
# Windows PowerShell
$a="string"
[regex]::Replace($a,'(.)(.)',{$args[0].Groups[1].Value.ToUpper()+$args[0].Groups[2].Value.ToLower()})
# PowerShell Core
$a="string"
$a -replace '(.)(.)',{$_.Groups[1].Value.ToUpper()+$_.Groups[2].Value.ToLower()}
请注意,脚本块替换可识别当前 MatchInfo
对象 ($_
)。使用 Replace()
方法,脚本块作为自动变量 $args
中的参数传递到 MatchInfo
对象中,除非您指定 param()
块。