1

我有一个(见下文)Ant 复制任务,它成功复制了所有包含正则表达式模式中的 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>
4

1 回答 1

0

使用正则表达式解析任意 SQL 是困难的。在 Ant 中也没有什么不同,但是,如果您的输入足够一致,您也许可以摆脱它。

一种选择可能是通过 SQL 语句处理输入 - 即将它拆分为分号而不是行尾 - 使用标记过滤器。因此,您发布的内容可能会有所不同

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

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

如果您的输入不是“干净的”,那么使用像这样的简单过滤器将难以稳健地满足所有输入可能性。

于 2013-01-29T00:08:41.900 回答