Предопределенный класс символов Java regex, вложенный в класс символов - PullRequest
2 голосов
/ 11 августа 2010

Мне нужно использовать регулярное выражение, которое содержит все символы \ 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.

Если кто-нибудь знает, как это сделать, я был бы очень признателен :) Спасибо

Ответы [ 2 ]

0 голосов
/ 11 августа 2010

Почему бы просто не использовать:

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

К вашему сведению, PatternSyntaxException всплывает, потому что \b соответствует позиции, а не символу.Класс символов всегда соответствует 1 символу, поэтому размещение \b (границы слова) внутри класса символов вызовет исключение.

0 голосов
/ 11 августа 2010

Здесь сработал бы негативный взгляд:

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

Помните, что в строковых литералах Java обратные косые черты в регулярных выражениях должны быть экранированы:

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