我需要使用包含除点之外的所有\ 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。
如果有人知道怎么做,我将非常感激:) 感谢
答案 0 :(得分:0)
负向前瞻可以在这里起作用:
\borg.argouml(?!\.)\b
请记住,在Java字符串文字中,必须转义正则表达式中的反斜杠:
"\\borg.argouml(?!\\.)\\b"
答案 1 :(得分:0)
为什么不简单地使用:
\b\w+(\.\w+)+\b
仅供参考,PatternSyntaxException
会弹出,因为\b
匹配某个位置,而不是字符。字符类总是匹配1个字符,因此在字符类中放置\b
(单词边界)将导致抛出异常。