使用带有以下示例字符串格式的正则表达式我想实现以下目的:
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;符号因此这是一个有效的字符。)
非常感谢任何输入。
答案 0 :(得分:2)
请注意,此正则表达式包含UPN
和User logon name (pre-Windows 2000)
,符合OP的要求(见问题下方的评论) - 感谢@Am_I_Helpful指出此问题出。因此,下面的正则表达式匹配格式user@domain.local
或domain\user
。
^(?:(?<username>[^@]+)@(?<domain>.+)|(?<domain>[^\\]+)\\(?<username>.+))$
简化子模式,第一个选项是匹配^[^@]+@.+$
,第二个匹配^[^\\]+\\.+$
。