【问题标题】:regex to match on username of email address正则表达式匹配电子邮件地址的用户名
【发布时间】:2016-12-23 08:36:46
【问题描述】:

我正在寻找有关正则表达式的帮助。我希望匹配的电子邮件地址的用户名(即 @ 符号之前的所有内容)包含单词 hello 和字母 a。所以,例如:

// matches
ahello@outlook.com
helloa@yahoo.com

// does not match
hello@gmail.com

我对正则表达式技术还是很陌生,因此感谢您的指点和解释。

【问题讨论】:

  • 可能是a tutorial?
  • 到目前为止,我一直在尝试 ^.*?(?=@) 从字符串的开头匹配任何字符 0 次或更多次,直到下一个字符为 @ 以最初在 @ 符号之前获得任何内容。我的计划是调整它以获得我想要的,但这似乎不起作用,因此我被卡住并需要指针。
  • This 是一个很好的资源,我发现自己一遍又一遍地查找。我链接到的特定部分讨论了电子邮件地址解析。它不会完全符合您的要求,但我建议您查看一下并返回您所做的任何更改。
  • @CameronGagnon 这是一个很好的资源。注意到并感谢。

标签: regex


【解决方案1】:

如果您非常确定您的电子邮件地址将仅包含可选的 ahello,请使用以下查询:

^(a(hello)@|(hello)a@)

Demo 附解释

【讨论】:

  • 谢谢,这非常有帮助,虽然我想匹配 helloabc@yahoo.com 之类的内容,因此我的问题不够明确
  • 好的,不用担心。祝你好运!
【解决方案2】:

除了语言之外,您还可以使用积极的前瞻(希望如此)来断言在用户名部分同时出现 helloa

(?=[^@]*hello)(?=[^@]*a).+

匹配的内容:

ahello@outlook.com
helloa@yahoo.com
myhellonamea@gmail.com
...

【讨论】:

  • 这太棒了,我也插入了 regex101 来解释每个元素。谢谢!
【解决方案3】:

对于将来遇到此问题的任何人来说,这只是另一种选择。如果您想匹配除a 之外的其他字符集,请将正则表达式中的a 替换为所需的字符。

(a.*)@|(.*a.*)@

abchello@gmail.com # matches abchello in group 
helloabc@gmail.com # matches helloabc
hello@gmail.com    # no match
bhello@gmail.com   # no match
hellob@gmail.com   # no match

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多