Java REGEX Оператор приоритет - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть несколько строк:

john doe happy
george smith is happy

Вот мое регулярное выражение:

([a-zA-Z ]+) (is happy|happy)

Мне нужна группа 1, чтобы всегда быть таким именем, как "Джон Доу" или "Джордж Смит"

Мне нужна группа 2, чтобы всегда быть либо "счастливой", либо "счастливой"

Прямо сейчас, "Джордж Смит счастлив" всегда совпадает с "Джордж Смит" и "счастлив" ... когда я действительно хочу, чтобы это было "Джордж Смит" и "счастлив"

Как сделать так, чтобы «счастлив» имел приоритет над «счастливым»?

1 Ответ

3 голосов
/ 20 февраля 2012

+ является жадным, что означает, что он будет соответствовать как можно большему числу символов, поэтому вы никогда не совпадете с is happy с вашим регулярным выражением в том виде, как оно написано. Вы можете изменить это на ленивое соответствие, изменив его на +?, что соответствует как можно меньшему числу символов (все еще один или более):

([a-zA-Z ]+?) (is happy|happy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...