Java正则表达式模式,在任何在线测试仪中都匹配,但不';日食中的t

Java正则表达式模式,在任何在线测试仪中都匹配,但不';日食中的t,java,regex,eclipse,Java,Regex,Eclipse,我有一段代码无法在安装了Java1.7的Eclipse上运行 我想使用一个正则表达式来匹配和提取每个匹配中的2个字符串,所以我使用了2个组 我在许多网站(在线regex测试人员)上测试过我的表达式,它对他们有效,但在Eclipse中我的Java项目不起作用 源字符串看起来像以下任何一个: 形式语言:isNatural 注释工具:isHuman%人类注释者:isHuman 混合批注:概念类型%Hybrid批注工具:概念类型%Hybrid标记集:概念类型 。。。等等 我想为每个匹配提取“:”前面的第

我有一段代码无法在安装了Java1.7的Eclipse上运行

我想使用一个正则表达式来匹配和提取每个匹配中的2个字符串,所以我使用了2个组

我在许多网站(在线regex测试人员)上测试过我的表达式,它对他们有效,但在Eclipse中我的Java项目不起作用

源字符串看起来像以下任何一个:

形式语言:isNatural

注释工具:isHuman%人类注释者:isHuman

混合批注:概念类型%Hybrid批注工具:概念类型%Hybrid标记集:概念类型

。。。等等

我想为每个匹配提取“:”前面的第一个单词和后面的单词

我使用的正则表达式是:

(\w*\s*\w+):(\s+\w+)%{0,1}

以及代码片段:

String attribute = parts[0];                            
Pattern pattern = Pattern.compile("(\\w*\\s*\\w+):(\\s+\\w+)%{0,1}");
Matcher matcher = pattern.matcher(attribute);
OWLDataProperty dataProp = null; 

if (matcher.matches()){
    while (matcher.find()){
        String name = null, domain = null;

        domain = matcher.group(1);
        name = matcher.group(2);

        dataProp = factory.getOWLDataProperty(":"+Introspector.decapitalize(name), pm); 

        OWLClass domainClass = factory.getOWLClass(":"+domain.replaceAll(" ", ""), pm);
        OWLDataPropertyDomainAxiom domainAxiom = factory.getOWLDataPropertyDomainAxiom(dataProp, domainClass);
        manager.applyChange(new AddAxiom(ontology, domainAxiom));
    }
你们有谁知道为什么它不起作用吗

非常感谢。

使用
matches()
时,您会询问提供的字符串是否与整个正则表达式匹配。这就好像您在正则表达式的开头添加了
^
,在末尾添加了
$

您的正则表达式在其他方面很好,并返回您期望的结果。我建议测试一下。您将看到
matches()
何时为真,何时为假,以及每个
find()
将返回什么


为了解决您的问题,我认为您只需要删除
if(matcher.matches())
条件。

好的,我找到了如何让它工作:只使用不带.matches()的.find()方法,因为在这种情况下可能有多个匹配。无论如何,非常感谢!