You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell使用-replace正则替换时如何捕获被替换的原匹配内容

实现方案

你可以先通过正则匹配提取待替换的原后缀内容存到变量,再执行替换操作,有两种常用的PowerShell原生实现方式:

方式1:使用-match操作符(推荐,写法更简洁)

-match匹配成功后会自动将捕获的内容存入系统自动变量$matches:

$a = 'john.doe@domain.com'
$originalSuffix = $null
# 匹配@及之后的所有内容,捕获存入$matches
if ($a -match "@.*") {
    $originalSuffix = $matches[0]
    $b = $a -replace "@.*", '@testdomain.com'
}

# 输出验证
$originalSuffix # 得到原后缀:@domain.com
$b # 得到替换后的结果:john.doe@testdomain.com

方式2:使用[regex]::Match静态方法

如果需要更灵活的正则匹配配置,可以用.NET的正则类直接提取匹配结果:

$a = 'john.doe@domain.com'
# 直接提取匹配的原后缀
$originalSuffix = [regex]::Match($a, "@.*").Value
# 执行替换
$b = $a -replace "@.*", '@testdomain.com'

补充说明

你原代码里的正则[?=@].*存在冗余,[?=@]的语义是匹配?、=、@三个字符中的任意一个,如果你确认输入的邮箱不会出现前两个特殊字符可以正常使用,更严谨的写法是直接用@.*匹配@符号之后的所有内容即可。


内容的提问来源于stack exchange,提问作者RobertK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:06:02