下午好,我这里有一个问题,我有一个正则表达式,可以提取 Telegram 链接中的用户名,从简单的“@”到
username.t.me
链接
问题是,如果我输入
@aaaa, @jfewewf
,两个用户名都会正确匹配,但是当我输入@aaaa, @jfewewf_
时,两个用户名都不匹配,即使脚本应该只匹配用户名@aaaa
(因为右侧的用户名是无效)
这是我的正则表达式:
(?:(?<!\S)@|(?:(?:https?://|)(?:t\.me|telegram\.(?:me|dog))/(?:c/|)|tg://resolve\?domain=)|(?=^(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\.t\.me$))(?P<username>(?!.*__)(?!.*_$)(?!.*_{2,})[a-z][a-z0-9_]{3,31})(?P<subdomain>\.t\.me)?
您可以通过此链接进行测试:https://regex101.com/r/JFF1S0/9
请帮助我🙏🙏🙏
提前致谢!
我已经尝试了几乎所有的方法,我根本不知道如何解决它(ChatGPT也根本没有帮助)
(?!.*_$)
并在 (?<!_)\b
之后添加
[a-z][a-z0-9_]{3,31}
这是更新后的正则表达式:
(?:(?<!\S)@|(?:(?:https?://|)(?:t\.me|telegram\.(?:me|dog))/(?:c/|)|tg://resolve\?domain=)|(?=^(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\.t\.me$))(?P<username>(?!.*__)(?!.*_{2,})[a-z][a-z0-9_]{3,31}(?<!_)\b)(?P<subdomain>\.t\.me)?
https://regex101.com/r/JFF1S0/10
这会检查到行尾,因此会在末尾找到“_”并且不会占用整行[1]
我删除你
并在(?!.*_$)
[3] 之后添加(?<!_)\b
[a-z][a-z0-9_]{3,31}