正则表达式后分组构造没有正确设置?

时间:2012-04-30 14:54:56

标签: regex nant

基于this主题。我试图在我的NAnt脚本中替换我的项目的当前版本。

这是我的替换代码段

<target name="Replace">
    <loadfile file="${SetVersionCpp.File}" property="h.file.content" />
    <regex
      input="${h.file.content}"
      pattern="(?'BEFORE'[.\s]*)${LineBegining}\s*[\s\d,]*\r\n(?'AFTER'[.\s]*)" />
    <echo
      file="${SetVersionCpp.File}"
      message="${BEFORE}${LineBegining} ${ReplaceWith}
      ${AFTER}"
      append="false"
      verbose="true" />
</target>

我在这个文件上打电话

#define FILEVER 0, 2, 0, 3
#define PRODUCTVER 0, 2, 0, 3
#define STRFILEVER     "00.02.00.03\0"
#define STRPRODUCTVER  "00.02.00.03\0"

使用以下参数

<property name="SetVersionCpp.File" value="${baseline.dir}\VersionNo.h" />
<property name="LineBegining" value="#define FILEVER" />
<property name="ReplaceWith" value="${FileVersion}" />

根据输出,AFTER变量由于某种原因没有捕获文件的其余部分。这就是我得到的:

[#define FILEVER 0, 2, 0, 30

]

*我把它放在括号中,以便空格格式正确

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

我通过将options设置为Singleline来修复它,以便.匹配换行符并从组中删除类:

<regex
  input="${h.file.content}"
  options="Singleline"
  pattern="(?'BEFORE'.*)${LineBegining}\s*[\s\d,]*\r\n(?'AFTER'.*)" />