一次性验证MS Teams频道名称、团队名称和频道地址!
Regex1:
^(?![s._])([^~#%&*{}+:<>?|n]{1,50})(?<![.])( - ).{1,256}$
这将成功验证:
MonkeyChannel - MonkeyTeam
但我也需要检查它是否包含这样的通道地址:
MonkeyChannel - MonkeyTeam <12337aab.domain.com@emea.teams.ms>
所以基本上我想我需要合并这个,它寻找一个信道地址:
Regex2:
(?<![[a-z0-9]{8}.domain.com@emea.teams.ms])
不知怎么的:
Regex1:
^(?![s._])([^~#%&*{}+:<>?|n]{1,50})(?<![.])( - ).{1,256}$
我的猜测看起来像这样,但不起作用:
Regex3:
^(?![s._])([^~#%&*{}+:<>?|n]{1,50})(?<![.])( - ).{1,256}(?<![[a-z0-9]{8}.domain.com@emea.teams.ms])$
任何regex向导谁能发现我的方法的错误?
您可以在锚点后添加负lookbhind,并注意您有<...>
而不是[...]
^(?![s._])[^~#%&*{}+:<>?|n]{1,50}(?<![.]) - .{1,256}$(?<!<[a-z0-9]{8}.domain.com@emea.teams.ms>)
Regex演示
另一种方法是在匹配-
后使用负前瞻
^(?![s._])[^~#%&*{}+:<>?|n]{1,50}(?<![.]) - (?!.*<[a-z0-9]{8}.domain.com@emea.teams.ms>).{1,256}$
Regex演示
如果你想在处理单独的零件后添加捕获组,你可以相应地添加。
如果你仍然想匹配第一部分,你可以选择匹配第二部分和第一部分,断言它不是以不需要的邮件地址开始的
^(?![s._])[^~#%&*{}+:<>?|n]{1,50}(?<![.]) - [^<>n]*(?:<(?![a-z0-9]{8}.domain.com@emea.teams.ms>).{1,256})?
Regex演示