正则表达式来检测几个字符串中的一个

我有一个属于几个域的电子邮件地址列表。 我想要一个匹配属于三个特定域的地址的正则表达式(例如:foo,bar和&baz)

所以这些将匹配:

  • 一个@ FOO
  • 一间酒吧
  • b @巴兹
  • 这不会:

  • 一个@ fnord
  • 理想情况下,这两者都不匹配(尽管对于这个特殊问题并不重要):

  • 一个@ foobar的
  • b @ foofoo
  • 将问题抽象一点:我想匹配一个至少包含一个给定的子串列表的字符串。


    使用管道符号表示“或”:

    /a@(foo|bar|baz)b/
    

    如果您不需要捕获组,请使用非捕获分组符号:

    /a@(?:foo|bar|baz)b/
    

    (当然,我假设电子邮件地址前面的“ a ”是可以的!您应该用适当的正则表达式替换它。)


    ^(a|b)@(foo|bar|baz)$
    

    如果你有这个强烈定义的列表。 开始和结束字符只会搜索这三个字符串。


    使用:

    /@(foo|bar|baz).?$/i
    

    注意与其他答案的区别:

  • .? - 匹配0或1个点,以防电子邮件地址中的域名为“完全限定”
  • $ - 表示该字符串必须以该序列结尾,
  • /i - 使测试用例不敏感。
  • 请注意,这假定每个电子邮件地址都是在一行上。

    如果匹配的字符串可能在字符串中的任何位置,则放弃$ ,并用s+替换它(匹配一个或多个空格字符)

    链接地址: http://www.djcxy.com/p/21421.html

    上一篇: Regex to detect one of several strings

    下一篇: How to find out if the current application is an ASP.NET web app