让我们假设我有一个字符串“something”并希望获得“some123”。
这将是我的正则表达式:/(some)(thing)/
// Pseudocode
$something = 'something'
$someone = $something.replace(/(some)(thing)/, '$1one') ###works
$some123 = $something.replace(/(some)(thing)/, '$1123') ###fails
$某人将毫无问题地工作,但$ some123将失败,因为解释器将查找不存在的组1123。
有什么想法吗?谢谢!
(编辑:我正在使用Powershell,但我认为它在其他语言中也是同样的问题,比如PHP)
答案 0 :(得分:6)
在Powershell中使用的.NET正则表达式中,您需要在反向引用中的捕获组ID周围使用{}
以消除任何歧义:
$something = 'something'
$someone = $something -replace "(some)(thing)", '${1}one' ### someone
$some123 = $something -replace "(some)(thing)", '${1}123' ### some123
如果您不确定,您还可以依赖命名的捕获:
$someone = $something -replace "(?<some>some)(?<thing>thing)", '${some}one'