Powershell正则表达式适用于一行,但不适用于另一行

时间:2013-10-23 18:10:42

标签: android regex powershell

我正在运行一个powershell脚本来自动构建我的apk for android项目。我可以传入一个应用版本代码和名称,我的构建脚本将用它来替换AndroidManifest.xml文件中的那些参数。

我需要更换两行。 xml文件中的原始行如下:

android:versionCode="1"
android:versionName="Version 1"

然后我运行两个不同的命令来替换每行上的文本,它们如下:

(Get-Content "$fullOutputPath\$projectFileName\AndroidManifest.xml") | ForEach-Object {$_ -replace "(android:versionCode=`")1(`")", "`$1$versionCode`$2"} | Set-Content "$fullOutputPath\$projectFileName\AndroidManifest.xml";
(Get-Content "$fullOutputPath\$projectFileName\AndroidManifest.xml") | ForEach-Object {$_ -replace "(android:versionName=`")1\.0(`")", "`$1$versionName`$2"} | Set-Content "$fullOutputPath\$projectFileName\AndroidManifest.xml";

为了测试我传入的参数测试者,版本名称为“2”,版本名称为“版本1”。生成的xml文件如下所示:

$12"
android:versionName="Version 1"

因此,你可以看到第二个正则表达式替换工作正常,第一个没有。我似乎无法理解为什么或如何解决它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

将替换表达式更改为:

"`${1}$versionCode`$2"

PowerShell在传递给正则表达式之前首先替换$versionCode。正则表达式看到12美元,但没有第12个捕获组。