5

我有以下文本文件:

    清单版本:3.0.0
    Ant 版本:Apache Ant 1.7.1
    创建者:10.0-b19(Sun Microsystems Inc.)
    要求捆绑:org.eclipse.linuxtools.cdt.libhover;bundle-version="1.
     1.0"
    Bundle-SymbolicName:com.qnx.doc.gestures.lib_ref
    捆绑版本:3.0.0.20121120
    捆绑本地化:插件
    捆绑包名称:%plugin.name
    捆绑供应商:%plugin.providername

我正在尝试在 replaceregexp 任务中使用以下模式

    regexp pattern='Require-Bundle: org.eclipse.linuxtools.cdt.libhover;bundle-version="1.
   [\s\S]*'

结束这个:

    清单版本:3.0.0
    Ant 版本:Apache Ant 1.7.1
    创建者:10.0-b19(Sun Microsystems Inc.)
     1.0"
    Bundle-SymbolicName:com.qnx.doc.gestures.lib_ref
    捆绑版本:3.0.0.20121120
    捆绑本地化:插件
    捆绑包名称:%plugin.name
    捆绑供应商:%plugin.providername

问题是我不断得到这个:

    清单版本:3.0.0
    Ant 版本:Apache Ant 1.7.1
    创建者:10.0-b19(Sun Microsystems Inc.)

     1.0"
    Bundle-SymbolicName:com.qnx.doc.gestures.lib_ref
    捆绑版本:3.0.0.20121120
    捆绑本地化:插件
    捆绑包名称:%plugin.name
    捆绑供应商:%plugin.providername

我的正则表达式应该是什么来摆脱空行?

谢谢。

4

2 回答 2

3

像这样的东西应该工作:

Require-Bundle: org\.eclipse\.linuxtools\.cdt\.libhover;bundle-version="1\.\s*1.0"\s*

\s*用于匹配零个或多个空格字符,包括\rand \n)但是由于您正在处理清单文件,因此使用适当的清单解析器会更有意义。不幸的是,Ant<manifest>任务没有提供删除属性的方法,但它对<script>任务来说非常简单:

<property name="manifest.file" location="path/to/manifest.txt" />

<script language="javascript"><![CDATA[
    importPackage(java.io);
    importPackage(java.util.jar);

    // read the manifest
    manifestFile = new File(project.getProperty('manifest.file'));
    manifest = new Manifest();
    is = new FileInputStream(manifestFile);
    manifest.read(is);
    is.close();

    // remove the offending attribute
    manifest.getMainAttributes().remove(new Attributes.Name('Require-Bundle'));

    // write back to the original file
    os = new FileOutputStream(manifestFile);
    manifest.write(os);
    os.close();
]]></script>
于 2012-11-20T22:12:48.583 回答
1
<replaceregexp file="manifest.mf" match='Require-Bundle: org.eclipse.linuxtools.cdt.libhover;bundle-version=\"[^\"]+\"[\r\n]*' replace="" flags="m"/>

这对我有用。

于 2012-11-20T22:27:05.273 回答