正则表达式确定Windows UPN

时间:2018-02-05 17:26:11

标签: c# regex

使用带有以下示例字符串格式的正则表达式我想实现以下目的:

user@domain.local

我想创建一个正则表达式,以使用命名组检索字符串的特定部分。我有以下适用于域但不适用于用户名:

(?<domain>([a-z0-9]+\.)*[a-z0-9]+\.[a-z]+).*(?<username>.*|)

https://regex101.com/r/nxL7my/3

我的域名论坛已填充,但我不明白为什么我的用户名组不会填充。是因为正则表达式需要返回到字符串的开头才能找到&#39; @&#39;的最后一个索引。然后选择之前的一切? (这是因为Windows UPN登录可能有一个&#39; @&#39;符号因此这是一个有效的字符。)

非常感谢任何输入。

1 个答案:

答案 0 :(得分:2)

请注意,此正则表达式包含UPNUser logon name (pre-Windows 2000),符合OP的要求(见问题下方的评论) - 感谢@Am_I_Helpful指出此问题出。因此,下面的正则表达式匹配格式user@domain.localdomain\user

See regex in use here

^(?:(?<username>[^@]+)@(?<domain>.+)|(?<domain>[^\\]+)\\(?<username>.+))$

简化子模式,第一个选项是匹配^[^@]+@.+$,第二个匹配^[^\\]+\\.+$