让我们假设我有一个字符串"某事",并想得到"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)
在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)