0

私は自分のプロジェクトのためにいくつかのビルドスクリプトを書いていました。特定の単語の前のすべてに一致する正規表現パターンが必要でした。例:私のスクリプトは次のようになります

Create Table ABC(
id int(50)
)

--//@UNDO

Drop table ABC

nantregexタスクを使用して--//@UNDOの前にすべてを一致させたい。どうすれば実装できますか?

また、-// @ UNDOがファイルに存在しない場合は、ファイル内のすべてと一致させたいと思います。私は道を譲っていません

4

4 に答える 4

0

文字列の前のテキスト(文字列自体ではなく)を一致させたい場合は、先読みを使用する必要があります。

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

シングルラインを指定する必要があります。

于 2012-07-04T18:14:26.510 に答える
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

これはパターンです:

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

結果はstrになります。

于 2012-07-04T18:07:59.000 に答える
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 に答える