【发布时间】:2011-05-13 14:59:36
【问题描述】:
我正在处理一堆 (~2000) .csproj 文件,在这个开发人员中,有一个历史先例是在构建后事件中嵌入 xcopy 以在构建过程中移动东西。为了将构建知识集中到一个地方,我正在努力消除这些 xcopy 调用,转而在我们的自动化构建过程中使用声明式构建操作。
考虑到这一点,我正在尝试提出一个正则表达式,我可以使用它来删除提供给 xcopy 的路径参数。这些陈述有几种风格:
xcopy /F /I /R /E /Y "..\..\..\Microsoft\Enterprise Library\3.1\bin"
xcopy /F /I /R /E /Y ..\Crm\*.* .\
xcopy ..\NUnit ..\..\..\output\debug /I /Y
具体来说:
- 不可预测的开关位置
- 不总是提供目标路径参数
- 路径参数有时用引号括起来
我不是正则表达式向导,但这就是我到目前为止所得到的(过度使用 parenteses 是为了在 powershell 中保存匹配:
(.*x?copy.* '"?)([^ /'"]+)('"/.* '"?)([^ /'"]+)('"?.*)
([^ /'"]+) 部分是我打算作为路径参数的部分,被定义为不包含引号、空格或正斜杠的字符串,但我觉得我必须应用两个正则表达式(一个用于带空格的引号包裹的路径和一个不带引号的路径)
不幸的是,当我运行这个正则表达式时,它似乎为我提供了第一个和第二个路径参数的相同匹配。最令人沮丧。
我该如何改变它来纠正它?
【问题讨论】:
-
你想精确匹配什么?仅路径,或者您希望将每个 xcopy 语句拆分为三个单独的匹配项(xcopy、参数、路径)?
-
我主要关心更新路径参数,因为当事物移动时必须维护它们(它们都表示为相对路径)。
标签: regex powershell build-automation csproj xcopy