Java Regex предопределенный класс символов вложенный внутри класса персонажей

StackOverflow https://stackoverflow.com/questions/3458214

  •  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 (граница слова) внутри класса символов приведет к брошению исключения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top