Ant复制任务:包括截止“;”之外的额外行?

时间:2013-01-27 19:11:44

标签: ant

我有一个(见下文)Ant复制任务,它成功复制了包含regexp模式中5个元素的所有行,但这些语句以“;”结尾有时超过一行,但不包括这些额外的行。他们是否可以将这些额外的行包括在结尾的“;”中?

<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>

1 个答案:

答案 0 :(得分:0)

使用正则表达式解析任意SQL是 hard 。在Ant中它没有什么不同,但是,如果你的输入足够一致,你就可以逃脱它。

一个选项可能是通过SQL语句处理输入 - 即使用tokenfilter将其拆分为分号而不是行结尾。因此,您发布的内容的变体可能是

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

您可以选择从输出中排除分隔符。

如果您的输入不是“干净”,则很难通过这样的简单过滤器来满足所有输入的可能性。