1

正規表現パターン内の5つの要素を含むすべての行を正常にコピーするAntコピータスクがありますが、これらのステートメントは「;」で終わります 1 行を超える場合もありますが、これらの余分な行は含まれません。これらの余分な行を最後の「;」まで含める方法はありますか?

<copy file="${updates-dir}/updates.sql"
      tofile="${updates-dir}/updates_filtered.sql">
  <filterchain>
    <linecontainsregexp>
      <regexp pattern="BEGIN;|INSERT INTO|UPDATE|DELETE FROM|COMMIT;"/>
    </linecontainsregexp>
  </filterchain>
</copy>
4

1 に答える 1

0

正規表現を使用して任意の SQL を解析するのは困難です。Ant でも違いはありませんが、入力に十分な一貫性がある場合は、問題を解決できる可能性があります。

1 つのオプションとして、 tokenfilterを使用して、入力を SQL ステートメントで処理する (つまり、行末ではなくセミコロンで分割する) ことが考えられます。したがって、投稿した内容のバリエーションは

<filterchain>
  <tokenfilter>
    <stringtokenizer delims=";"/>
    <containsregex pattern="BEGIN|INSERT INTO|UPDATE|DELETE FROM|COMMIT" />
  </tokenfilter>
</filterchain>

オプションで、区切り文字を出力から除外できます。

入力が「クリーン」でない場合、このような単純なフィルターですべての入力の可能性に確実に対応することは困難です。

于 2013-01-29T00:08:41.900 に答える