Вынуждая регулярное выражение игнорировать обнаружение в зависимости от предлога - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь построить регулярное выражение, которое будет определять имена пользователей, упомянутые в строке. Имена пользователей могут выглядеть как «username», «username [0-9]», «adm-username», «adm-username [0-9]».

На данный момент у меня есть это: \b(adm\-){0,1}username[0-9]{0,1}\b (ссылка: https://regexr.com/4at34)

Проблема с адм. Если предлог - aadm-username, регулярное выражение все еще обнаруживает 'username', я хочу, чтобы оно не сработало. Любые советы, как это сделать?

Спасибо

1 Ответ

1 голос
/ 25 марта 2019

Вы можете заменить \b на [\w-] в вашем случае.

Кроме того, не совпадают границы.

И, наконец, не сопоставляйте промежуточные группы, составьте одну большую группу для своих матчей.

Демо

(?<![\w-])((?:adm-)?username\d?)(?![\w-])

[v] username 
[v] username2 
[v] adm-username 
[v] adm-username2 
[x] aadm-username 
[x] aadm-username2

Объяснение

(?<![\w-])              # negative lookbehind, only match if no word character or hyphen is present
(
    (?:adm-)?           # non-matching group containing adm- literally once or none, will be matched in the greater group
    username\d?      # literally matching username and a digit, once or none
)
(?![\w-])               # negative lookahead, only match if no word character or hyphen is present
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...