正则表达式匹配一个单词前的所有内容。用于nant脚本

时间:2012-07-04 17:58:29

标签: regex nant

我正在为我的项目编写一些构建脚本。我想要一个正则表达式模式,可以匹配特定单词之前的所有内容。例如:我的脚本看起来像这样

Create Table ABC(
id int(50)
)

--//@UNDO

Drop table ABC

我想在之前匹配所有内容 - // @ UNDO使用nant regex task。我该如何实现呢?

如果 - @ @ UNDO不存在于文件中,我还希望它匹配文件中的所有内容。我没有办法解决问题

4 个答案:

答案 0 :(得分:0)

这是模式:

(?'str'.*?)--//@UNDO

结果将在str。

答案 1 :(得分:0)

如果您只想匹配字符串之前的文本(而不是字符串本身),则需要使用前瞻。

.*?(?=--//@UNDO)

需要指定单行仍然适用。

答案 2 :(得分:0)

这将是NAnt的目标:

<target name="go">
  <loadfile
    file="C:\foo\bar.sql"
    property="content" />
  <regex
    pattern="(?'content'.*)--//@UNDO"
    input="${content}"
    options="Singleline"
    failonerror="false" />
  <echo message="${content}" />
</target>

请注意,如果文件中不存在content,则预设属性--//@UNDO时会显示完整的文件内容。

答案 3 :(得分:0)

这就是我最终做的事情

<loadfile file="${filePathAndName}" property="file.contents" />
    <property name="fileHasUndo" value="${string::index-of(file.contents, '--//@UNDO')}" />
    <choose>
      <when test="${fileHasUndo ==  '-1' }">
          <echo file="${file}" append="true" message="${file.contents}" />
      </when>
      <otherwise>
        <regex pattern="(?'sql'[\s\S]*)--\/\/@UNDO[\s\S]*"  input="${file.contents}" options="Multiline"/>
        <echo file="${file}" append="true" message="${sql}" />
      </otherwise>
    </choose>

我找到了索引 - // @ UNDO。并且取决于它的存在我正在做什么选择..解决问题