在任何在线测试器中都匹配但在Eclipse中不匹配的Java Regex模式

发布于 2021-01-31 15:19:39

我有一段代码无法在安装了Java 1.7的Eclipse上运行。

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

我已经在许多网站(在线正则表达式测试仪)上测试了我的表情,但对他们有用,但在Eclipse中的Java项目中却无法使用。

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

形式语言:isNatural

注释工具:isHuman%Human注释者:isHuman

混合注释:conceptType%混合注释工具:conceptType%混合标签集: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));
    }

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

非常感谢。

关注者
0
被浏览
57
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    使用时matches(),您要询问提供的字符串是否与您的正则表达式整体匹配。就像您^在正则表达式的开头和$结尾添加的一样。

    否则,您的正则表达式可以正常运行,并返回您期望的结果。我建议在Java模式regexplanet.com上对其进行测试。您将看到何时matches()为true,何时为true
    false以及每个find()返回的内容。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看