2

我需要使用包含除点之外的所有 \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&&[^\.])没有匹配项。

我使用这个链接来测试我的正则表达式。

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

我没有\s在末尾使用字符类,因为包可能位于行尾,或者它后面可能跟着其他非单词字符,例如:)中包含的字符\b。我只想减去 . 来自 \b 类。

如果有人知道如何做到这一点,我将非常感激:) 谢谢

4

2 回答 2

0

负前瞻将在这里工作:

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

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

"\\borg.argouml(?!\\.)\\b"
于 2010-08-11T12:38:37.257 回答
0

为什么不简单地使用:

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

仅供参考,PatternSyntaxException弹出是因为\b匹配一个位置,而不是一个字符。字符类始终匹配 1 个字符,因此将\b(单词边界)放入字符类将导致引发异常。

于 2010-08-11T12:59:19.353 回答