Java regex预定义的字符类嵌套在字符类中

时间:2010-08-11 12:31:50

标签: java regex subtraction

我需要使用包含除点之外的所有\ b字符的正则表达式。

[\b&&[^.]]

这样的东西

例如,在以下测试字符串中:

"somewhere deep down in some org.argouml.swingext classes and"

我希望org.argouml.swingext字符串匹配,但org.argouml字符串不匹配。 (使用Matcher.find()方法)

如果我使用:\b(package_name)>\b他们都匹配,这不是我想要的。

如果我使用:\b(package_name)[\b&&[^\.]],我会收到PatternSyntaxException

如果我使用:\b(package_name)(\b&&[^\.])没有匹配。

我使用this link来测试我的正则表达式。

上下文:我有一个项目的包名列表,我必须在一些文本中搜索它们。显然,如果找到嵌套包,我不希望外包也匹配,如上例所示。

我最后没有使用\s字符类,因为包可能位于行尾,或者可能后跟其他非字符字符,例如:)等,\b类中包含的字符。我只想减去。来自\ b class。

如果有人知道怎么做,我将非常感激:) 感谢

2 个答案:

答案 0 :(得分:0)

负向前瞻可以在这里起作用:

\borg.argouml(?!\.)\b

请记住,在Java字符串文字中,必须转义正则表达式中的反斜杠:

"\\borg.argouml(?!\\.)\\b"

答案 1 :(得分:0)

为什么不简单地使用:

\b\w+(\.\w+)+\b

仅供参考,PatternSyntaxException会弹出,因为\b匹配某个位置,而不是字符。字符类总是匹配1个字符,因此在字符类中放置\b(单词边界)将导致抛出异常。