Java Regex предопределенный класс символов вложенный внутри класса персонажей
-
27-09-2019 - |
Вопрос
Мне нужно использовать регулярное выражение, которое содержит все символы 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.
Если кто-нибудь знает, как это сделать, я был бы очень благодарен :) Спасибо
Решение
Отрицательный поиск будет работать здесь:
\borg.argouml(?!\.)\b
Помните, что в Java String Listrals Backshalles в регулярных выражениях должен быть сбежен:
"\\borg.argouml(?!\\.)\\b"
Другие советы
Почему бы не просто использовать:
\b\w+(\.\w+)+\b
FYI, то PatternSyntaxException
всплывает, потому что \b
соответствует позиции, а не персонажу. Класс персонажа всегда соответствует 1 символу, так что положить \b
(граница слова) внутри класса символов приведет к брошению исключения.