在任何在线测试器中都匹配但在Eclipse中不匹配的Java Regex模式
我有一段代码无法在安装了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));
}
你们中有人知道为什么它不起作用吗?
非常感谢。
-
使用时
matches()
,您要询问提供的字符串是否与您的正则表达式整体匹配。就像您^
在正则表达式的开头和$
结尾添加的一样。否则,您的正则表达式可以正常运行,并返回您期望的结果。我建议在Java模式regexplanet.com上对其进行测试。您将看到何时
matches()
为true,何时为true
false
以及每个find()
返回的内容。为了解决您的问题,我认为您只需删除
if (matcher.matches())
条件。