我有一个(见下文)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>
答案 0 :(得分:0)
使用正则表达式解析任意SQL是 hard 。在Ant中它没有什么不同,但是,如果你的输入足够一致,你就可以逃脱它。
一个选项可能是通过SQL语句处理输入 - 即使用tokenfilter将其拆分为分号而不是行结尾。因此,您发布的内容的变体可能是
<filterchain>
<tokenfilter>
<stringtokenizer delims=";"/>
<containsregex pattern="BEGIN|INSERT INTO|UPDATE|DELETE FROM|COMMIT" />
</tokenfilter>
</filterchain>
您可以选择从输出中排除分隔符。
如果您的输入不是“干净”,则很难通过这样的简单过滤器来满足所有输入的可能性。