Java 换行忽略正则表达式以在清单文件中查找包名

Java 换行忽略正则表达式以在清单文件中查找包名,java,regex,osgi,manifest,Java,Regex,Osgi,Manifest,以以下清单文件为例: Manifest-Version: 1.0 Bnd-LastModified: 1418226794711 Build-Jdk: 1.7.0_67 Built-By: ubuntu Bundle-Description: Camel FTP support Bundle-DocURL: http://www.apache.org/ Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt Bundle-Ma

以以下清单文件为例:

Manifest-Version: 1.0
Bnd-LastModified: 1418226794711
Build-Jdk: 1.7.0_67
Built-By: ubuntu
Bundle-Description: Camel FTP support
Bundle-DocURL: http://www.apache.org/
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: camel-ftp
Bundle-SymbolicName: org.apache.camel.camel-ftp
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 2.14.1
Created-By: Apache Maven Bundle Plugin
Export-Package: org.apache.camel.component.file.remote;uses:="com.jcraft
 .jsch,org.slf4j,org.apache.camel.util,org.apache.camel.component.file,o
 rg.apache.camel,org.apache.commons.net.ftp,org.apache.camel.spi,org.apa
 che.camel.util.jsse,javax.net.ssl,org.apache.camel.impl,org.apache.came
 l.processor.idempotent";version="2.14.1",org.apache.camel.component.fil
 e.remote.strategy;uses:="org.apache.camel.util,org.apache.camel.compone
 nt.file,org.apache.camel,org.apache.commons.net.ftp,org.slf4j,org.apach
 e.camel.component.file.strategy,com.jcraft.jsch";version="2.14.1"
Export-Service: org.apache.camel.spi.ComponentResolver;component=ftp,org
 .apache.camel.spi.ComponentResolver;component=ftps,org.apache.camel.spi
 .ComponentResolver;component=sftp
Implementation-Title: Apache Camel
Implementation-Version: 2.14.1
Import-Package: com.jcraft.jsch;version="[0.1.40,0.2)",javax.net.ssl,org
 .apache.camel;version="[2.14,2.15)",org.apache.camel.component.file;ver
 sion="[2.14,2.15)",org.apache.camel.component.file.strategy;version="[2
 .14.1,2.14.2)",org.apache.camel.impl;version="[2.14,2.15)",org.apache.c
 amel.processor.idempotent;version="[2.14,2.15)",org.apache.camel.spi;ve
 rsion="[2.14,2.15)",org.apache.camel.util;version="[2.14,2.15)",org.apa
 che.camel.util.jsse;version="[2.14,2.15)",org.apache.commons.net.ftp;ve
 rsion="[3.3,4)",org.slf4j;version="[1.6,2)"
Karaf-Info: Camel;camel-ftp=2.14.1
Tool: Bnd-1.50.0
String searchedPackageName = "org.apache.camel.component.file.remote.strategy";

Manifest manifest = new Manifest(streamOfTheManifest);
String exportPackageHeader = manifest.getMainAttributes().getValue("Export-Package");

// Parser and clause comes from org.apache.felix.utils.manifest package
Clause[] clauses = Parser.parseHeader(exportPackageHeader);

for (Clause exportPackageClause : clauses) {
    String exportedPackageName = exportPackageClause.getName();
    if (searchedPackageName.equals(exportedPackageName) {
    // Do your stuff here
  }
}
在寻找依赖性问题的过程中,我经常在项目清单中搜索特定的包。然而,由于断线,很难找到它们。例如,如果我将org.apache.camel.component.file.remote.strategy作为简单文本查找,则不会找到它,因为org.apache.camel.component.fil后面有一个换行符

你能想象出任何正则表达式可以用来搜索忽略任何位置换行的文本吗?可以用正则表达式吗?请提供一个示例regex来查找org.apache.camel.component.file.remote.strategy!是否有其他解决方案可以轻松搜索清单?

为什么不使用该类来处理清单文件?您可以使用接受InputStream的构造函数

在分析清单之后,您可以获得所需的特定属性(我猜您的案例中是导出包)

同样,如果使用正则表达式,您可能会有一个错误,即在Export package子句的属性或指令之一(例如:在uses指令中)中找到一个包。因此,我建议您应该使用库来解析每个子句

例如:

Manifest-Version: 1.0
Bnd-LastModified: 1418226794711
Build-Jdk: 1.7.0_67
Built-By: ubuntu
Bundle-Description: Camel FTP support
Bundle-DocURL: http://www.apache.org/
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: camel-ftp
Bundle-SymbolicName: org.apache.camel.camel-ftp
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 2.14.1
Created-By: Apache Maven Bundle Plugin
Export-Package: org.apache.camel.component.file.remote;uses:="com.jcraft
 .jsch,org.slf4j,org.apache.camel.util,org.apache.camel.component.file,o
 rg.apache.camel,org.apache.commons.net.ftp,org.apache.camel.spi,org.apa
 che.camel.util.jsse,javax.net.ssl,org.apache.camel.impl,org.apache.came
 l.processor.idempotent";version="2.14.1",org.apache.camel.component.fil
 e.remote.strategy;uses:="org.apache.camel.util,org.apache.camel.compone
 nt.file,org.apache.camel,org.apache.commons.net.ftp,org.slf4j,org.apach
 e.camel.component.file.strategy,com.jcraft.jsch";version="2.14.1"
Export-Service: org.apache.camel.spi.ComponentResolver;component=ftp,org
 .apache.camel.spi.ComponentResolver;component=ftps,org.apache.camel.spi
 .ComponentResolver;component=sftp
Implementation-Title: Apache Camel
Implementation-Version: 2.14.1
Import-Package: com.jcraft.jsch;version="[0.1.40,0.2)",javax.net.ssl,org
 .apache.camel;version="[2.14,2.15)",org.apache.camel.component.file;ver
 sion="[2.14,2.15)",org.apache.camel.component.file.strategy;version="[2
 .14.1,2.14.2)",org.apache.camel.impl;version="[2.14,2.15)",org.apache.c
 amel.processor.idempotent;version="[2.14,2.15)",org.apache.camel.spi;ve
 rsion="[2.14,2.15)",org.apache.camel.util;version="[2.14,2.15)",org.apa
 che.camel.util.jsse;version="[2.14,2.15)",org.apache.commons.net.ftp;ve
 rsion="[3.3,4)",org.slf4j;version="[1.6,2)"
Karaf-Info: Camel;camel-ftp=2.14.1
Tool: Bnd-1.50.0
String searchedPackageName = "org.apache.camel.component.file.remote.strategy";

Manifest manifest = new Manifest(streamOfTheManifest);
String exportPackageHeader = manifest.getMainAttributes().getValue("Export-Package");

// Parser and clause comes from org.apache.felix.utils.manifest package
Clause[] clauses = Parser.parseHeader(exportPackageHeader);

for (Clause exportPackageClause : clauses) {
    String exportedPackageName = exportPackageClause.getName();
    if (searchedPackageName.equals(exportedPackageName) {
    // Do your stuff here
  }
}
为什么不使用该类来处理清单文件?您可以使用接受InputStream的构造函数

在分析清单之后,您可以获得所需的特定属性(我猜您的案例中是导出包)

同样,如果使用正则表达式,您可能会有一个错误,即在Export package子句的属性或指令之一(例如:在uses指令中)中找到一个包。因此,我建议您应该使用库来解析每个子句

例如:

Manifest-Version: 1.0
Bnd-LastModified: 1418226794711
Build-Jdk: 1.7.0_67
Built-By: ubuntu
Bundle-Description: Camel FTP support
Bundle-DocURL: http://www.apache.org/
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: camel-ftp
Bundle-SymbolicName: org.apache.camel.camel-ftp
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 2.14.1
Created-By: Apache Maven Bundle Plugin
Export-Package: org.apache.camel.component.file.remote;uses:="com.jcraft
 .jsch,org.slf4j,org.apache.camel.util,org.apache.camel.component.file,o
 rg.apache.camel,org.apache.commons.net.ftp,org.apache.camel.spi,org.apa
 che.camel.util.jsse,javax.net.ssl,org.apache.camel.impl,org.apache.came
 l.processor.idempotent";version="2.14.1",org.apache.camel.component.fil
 e.remote.strategy;uses:="org.apache.camel.util,org.apache.camel.compone
 nt.file,org.apache.camel,org.apache.commons.net.ftp,org.slf4j,org.apach
 e.camel.component.file.strategy,com.jcraft.jsch";version="2.14.1"
Export-Service: org.apache.camel.spi.ComponentResolver;component=ftp,org
 .apache.camel.spi.ComponentResolver;component=ftps,org.apache.camel.spi
 .ComponentResolver;component=sftp
Implementation-Title: Apache Camel
Implementation-Version: 2.14.1
Import-Package: com.jcraft.jsch;version="[0.1.40,0.2)",javax.net.ssl,org
 .apache.camel;version="[2.14,2.15)",org.apache.camel.component.file;ver
 sion="[2.14,2.15)",org.apache.camel.component.file.strategy;version="[2
 .14.1,2.14.2)",org.apache.camel.impl;version="[2.14,2.15)",org.apache.c
 amel.processor.idempotent;version="[2.14,2.15)",org.apache.camel.spi;ve
 rsion="[2.14,2.15)",org.apache.camel.util;version="[2.14,2.15)",org.apa
 che.camel.util.jsse;version="[2.14,2.15)",org.apache.commons.net.ftp;ve
 rsion="[3.3,4)",org.slf4j;version="[1.6,2)"
Karaf-Info: Camel;camel-ftp=2.14.1
Tool: Bnd-1.50.0
String searchedPackageName = "org.apache.camel.component.file.remote.strategy";

Manifest manifest = new Manifest(streamOfTheManifest);
String exportPackageHeader = manifest.getMainAttributes().getValue("Export-Package");

// Parser and clause comes from org.apache.felix.utils.manifest package
Clause[] clauses = Parser.parseHeader(exportPackageHeader);

for (Clause exportPackageClause : clauses) {
    String exportedPackageName = exportPackageClause.getName();
    if (searchedPackageName.equals(exportedPackageName) {
    // Do your stuff here
  }
}

把你的搜索词和

  • 转义正则表达式特殊字符,例如…->\
  • 在所有字符之间添加“\s*”
并确保使用dotall和Multiline运行正则表达式

非常好的正则表达式开发工具是位于

在清单中搜索可以通过我编写的一个小型文件搜索库来实现。这允许cmd行执行“java-jar…”。这个lib最初的用途正是您的任务描述——在bundle及其MANIFEST.MF文件中进行依赖性研究。
来源在这里

获取您的搜索词并

  • 转义正则表达式特殊字符,例如…->\
  • 在所有字符之间添加“\s*”
并确保使用dotall和Multiline运行正则表达式

非常好的正则表达式开发工具是位于

在清单中搜索可以通过我编写的一个小型文件搜索库来实现。这允许cmd行执行“java-jar…”。这个lib最初的用途正是您的任务描述——在bundle及其MANIFEST.MF文件中进行依赖性研究。
来源在这里

是的,我知道解析清单会起作用。我只需要一个命令行工具或一些快速的方法来查找文件夹中的清单。当然我可以写一个,但这不是我的初衷:)我不确定在任何时候都可能发生换行的地方可以写正则表达式。此外,如果您想要处理一个子句可能具有的所有语法规则,那么您应该注意太多的特殊性。即使您可以编写这样一个正则表达式,我认为这也会很慢(正则表达式并不总是很快)。Manifest类已经在Java中,felix utils的使用方式通常是将其必要的类简单地复制出来。我建议您也应该这样做,并且您可以拥有一个可运行的控制台应用程序,而不需要任何依赖项(而且速度足够快),以便进行清单解析,我不需要Felix。简单的JDK类就可以完成这项工作。嗯。是的,解析这些值看起来还是有用的。是的。如果您不使用felix utils的HeaderParser,您将遇到一个问题,即您可能会在uses指令或任何自定义属性中找到包名。通过分析子句,可以避免这些问题。我不认为解析器运行速度慢,因为它通过头部、设置标志和分离数据。是的,我知道解析清单会起作用。我只需要一个命令行工具或一些快速的方法来查找文件夹中的清单。当然我可以写一个,但这不是我的初衷:)我不确定在任何时候都可能发生换行的地方可以写正则表达式。此外,如果您想要处理一个子句可能具有的所有语法规则,那么您应该注意太多的特殊性。即使您可以编写这样一个正则表达式,我认为这也会很慢(正则表达式并不总是很快)。Manifest类已经在Java中,felix utils的使用方式通常是将其必要的类简单地复制出来。我建议您也应该这样做,并且您可以拥有一个可运行的控制台应用程序,而不需要任何依赖项(而且速度足够快),以便进行清单解析,我不需要Felix。简单的JDK类就可以完成这项工作。嗯。是的,解析这些值看起来还是有用的。是的。如果您不使用felix utils的HeaderParser,您将遇到一个问题,即您可能会在uses指令或任何自定义属性中找到包名。通过分析子句,可以避免这些问题。我不认为解析器运行速度慢,因为它贯穿头部、设置标志和分离数据。我也喜欢Quickrex。我会尝试一下你的项目,谢谢。我过会儿再来找你。我也喜欢Quickrex。我会尝试一下你的项目,谢谢。我过会儿再来找你。