Мне нужно найти все упоминания пользователей в комментарии. Это означает, что мне нужно найти все совпадения регулярных выражений 1)
, где есть не более одной точки и подчеркивание после @
.
Вот регулярное выражение, которое можно использовать, чтобы найти все возможные упоминания:
1) \B(@[a-z_.]{3,24})
Я хочу быть уверен, что символы после @
являются действительными именами пользователей (не нужно проверять, существует ли пользователь в БД)
Я использую это регулярное выражение для проверки имени пользователя:
2) '^(?!(.*?\_){2})(?!(.*?\.){2})[a-z0-9\._]{3,24}$'
Проверяет, что имя пользователя состоит из 3-24 символов и содержит 0-1 точку и подчеркивание.
Имя пользователя regex не будет работать для всего текста из-за negative lookahead
Я пытался объединить регулярные выражения 1)
и 2)
, но это не сработает.
В настоящее время я остановился здесь
Также можно использовать регулярное выражение 1)
и для каждого матча использовать регулярное выражение 2)
. Мне это не нравится, потому что оно будет работать очень медленно на длинных комментариях ...
UPDATE :
Например, у меня есть комментарий
'text @valid_username text @unvalid_username_ text @valid.username text @unvalid..username'
Мне нужны только те упоминания, где имя пользователя состоит из 3-24 символов и не содержит более одной точки и подчеркивания