在任何在线测试程序中匹配但在Eclipse

时间:2015-06-18 10:34:51

标签: java regex eclipse

我有一段代码,我无法在Eclipse上安装Java 1.7。

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

我已经在许多网站(在线正则表达式测试人员)中测试了我的表达,并且它适用于它们,它不适用于Eclipse中的Java项目。

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

形式语言:isNatural

注释工具:isHuman%Human Annotator:isHuman

混合注释:conceptType%混合注释工具:conceptType%Hybrid Tagset:conceptType

......等等。

我想在每次比赛之前提取“:”之前的第一个单词和之后的单词。

我正在使用的正则表达式是:

(\ 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));
    }

你们有没有人知道为什么它不起作用?

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

你的正则表达式在其他方面很好,并返回你的期望。我建议测试它regexplanet.com, Java mode。您会看到matches()何时为真,何时为false,以及每个find()将返回的内容。

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