一次性验证MS Teams频道名称、团队名称和频道地址//OwMyHead



一次性验证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演示

最新更新