如何用数字替换REGEX - 比如$ 1 <number>

Ger*_*ied 3 regex powershell

让我们假设我有一个字符串"某事",并想得到"some123".

这将是我的正则表达式: /(some)(thing)/

// Pseudocode
$something = 'something'
$someone = $something.replace(/(some)(thing)/, '$1one') ###works
$some123 = $something.replace(/(some)(thing)/, '$1123') ###fails
Run Code Online (Sandbox Code Playgroud)

$ someone会毫无问题地工作,但是$ 123会失败,因为解释器会查找不存在的组1123.

有任何想法吗?谢谢!

(编辑:我正在使用Powershell,但我认为它在其他语言中也是同样的问题,比如PHP)

Wik*_*żew 6

在Powershell中使用的.NET正则表达式中,您需要{}在反向引用中使用捕获组ID来消除任何歧义:

$something = 'something'
$someone = $something -replace "(some)(thing)", '${1}one' ### someone
$some123 = $something -replace "(some)(thing)", '${1}123' ### some123
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您不确定,您还可以依赖命名捕获:

$someone = $something -replace "(?<some>some)(?<thing>thing)", '${some}one'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述