Java регулярное выражение позволяет всем персонажам ожидать ` - PullRequest
0 голосов
/ 16 апреля 2020

Я создал шаблон регулярного выражения, чтобы разрешить count(*), но не разрешать `count(*)`

[^`]*[Cc][Oo][Uu][Nn][Tt][(](\*)[)][^`]*

Это работает индивидуально, но если я передам их вместе

count(*),`count(*)`

Я должен получить этот матч, но его противоположность

1 Ответ

1 голос
/ 16 апреля 2020

Обратите внимание, что [^`]* соответствует нулю или более обратных меток, поэтому не препятствует сопоставлению строки Count(*) между обратными чертами.

Вы можете используйте

(?i)(?<!`)Count\(\*\)(?!`)

Или, если вам нужно сопоставить его как целое слово, добавьте \b в начале перед словом:

(?i)(?<!`)\bCount\(\*\)(?!`)

См. демонстрационный пример regex

Подробности

  • (?i) - модификатор без учета регистра
  • (?<!`) - нет ` разрешено немедленно слева от текущего местоположения.
  • \b - граница слова
  • Count\(\*\) - Count(*) подстрока
  • (?!`) - нет ` разрешено немедленно справа от текущего местоположения.

In Java,

String regex = "(?i)(?<!`)Count\\(\\*\\)(?!`)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...