Java Regex Question - Игнорировать цитаты - PullRequest
2 голосов
/ 01 февраля 2011

Я пытаюсь написать программу с использованием регулярных выражений. Формат для идентификатора, как я мог бы объяснить в другом моем вопросе, заключается в том, что он может начинаться только с буквы (а остальная часть может содержать что угодно). У меня эта часть проработана по большей части. Однако что-либо в кавычках также не может считаться идентификатором.

В настоящее время я использую Pattern pattern = Pattern.compile("[A-Za-z][_A-Za-z0-9]*"); в качестве шаблона, что указывает на то, что первым символом могут быть только буквы. Так, как я могу отредактировать это, чтобы проверить, окружено ли слово кавычками (и ИСКЛЮЧИТЬ эти слова)?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Используйте отрицательные lookaround утверждения:

"(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")"

Пример:

Pattern pattern = Pattern.compile("(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")");
Matcher matcher = pattern.matcher("Foo \"bar\" baz");
while (matcher.find())
{
    System.out.println(matcher.group());
}

Вывод:

Foo
baz

Смотрите, как работает онлайн: ideone .

2 голосов
/ 01 февраля 2011

Используйте lookarounds.

"(?<![\"A-Za-z])[A-Z...

Часть (?<![\"A-Za-z]) означает «если предыдущий символ не является кавычкой или буквой».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...