0

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

Create Table ABC(
id int(50)
)

--//@UNDO

Drop table ABC

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

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

4

4 回答 4

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

于 2012-07-05T19:32:05.990 回答
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 的索引。并且根据它的存在,我正在做一个选择..解决了这个问题

于 2012-07-09T09:58:24.423 回答
0

This is the pattern:

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

The result will be in str.

于 2012-07-04T18:07:59.000 回答
0

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

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

需要指定 Singleline 仍然适用。

于 2012-07-04T18:14:26.510 回答