Регулярное выражение: как искать идентификаторы \ w, которые не содержат 2 последовательных подчеркивания - PullRequest
1 голос
/ 04 мая 2020

Я попытался "[A-Z][A-Z0-9_]*(_[A-Z0-9]+)+", чтобы найти идентификаторы, состоящие из '_' -компонентных компонентов alnum, начинающихся с буквы и не содержащих строчных букв, например, "ID_RED", "NO_ENTRY_PERMITTED", "THIS_IS4YOU_ALL". Я не хочу ловить слова "THINKING__NO" или "4YOU_AND_ME".

Кажется, ошибка во второй части "(_[A-Z0-9]+)+"; по крайней мере, он не жадный, как ожидалось, но дает _RED, _ENTRY, _IS4YOU

1 Ответ

1 голос
/ 04 мая 2020

Проблема с [A-Z0-9_]* деталью, которая может соответствовать 0 или более последовательных _ символов. Ваш шаблон все равно не привязан, поэтому он также может найти частичные совпадения в более длинных словах.

Вы можете использовать

\b[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)+\b

См. Демонстрационную версию regex

Подробности :

  • \b - граница слова
  • [A-Z] - заглавная буква
  • [A-Z0-9]* - 0 + заглавные буквы или цифры
  • (?:_[A-Z0-9]+)+ - 1 или более вхождений _, а затем 1+ заглавные буквы или цифры
  • \b - граница слова
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...