首页 > 解决方案 > 如何连接正则表达式匹配和不带空格或其他字符的字符串变量?

问题描述

我想在 Powershell 的文件中用正则表达式替换日期。需要保留所有空白:

#define    BUILD_DATE          20181010

当前日期是一个变量:

[string]$Today = Get-Date -UFormat "%Y%m%d"

在替换表达式中使用匹配时,我学会了使用反引号:

(Get-Content $ItemFullPath) |
Foreach-Object { $_ -replace "(#define\s+?BUILD_DATE\s+?)\S+", "`$1$Today" } |
Set-Content $ItemFullPath

但这会导致:

#define    BUILD_DATE          $Today

我不能在这里添加另一个空格字符。该文件的其他读取器和写入器希望存在相同的空白。

标签: powershell

解决方案


使用大括号,以便 PowerShell 和正则表达式引擎不会混淆一个变量/反向引用的结束位置和另一个开始的位置。此外,ForEach-Object这里不需要 ,因为-replace运算符作为枚举器工作,因此可以直接用于数组。

(Get-Content $ItemFullPath) -replace "(#define\s+?BUILD_DATE\s+?)\S+", "`${1}$Today" } |
    Set-Content $ItemFullPath

推荐阅读