正则表达式来检测几个字符串中的一个
我有一个属于几个域的电子邮件地址列表。 我想要一个匹配属于三个特定域的地址的正则表达式(例如:foo,bar和&baz)
所以这些将匹配:
这不会:
理想情况下,这两者都不匹配(尽管对于这个特殊问题并不重要):
将问题抽象一点:我想匹配一个至少包含一个给定的子串列表的字符串。
使用管道符号表示“或”:
/a@(foo|bar|baz)b/
如果您不需要捕获组,请使用非捕获分组符号:
/a@(?:foo|bar|baz)b/
(当然,我假设电子邮件地址前面的“ a
”是可以的!您应该用适当的正则表达式替换它。)
^(a|b)@(foo|bar|baz)$
如果你有这个强烈定义的列表。 开始和结束字符只会搜索这三个字符串。
使用:
/@(foo|bar|baz).?$/i
注意与其他答案的区别:
.?
- 匹配0或1个点,以防电子邮件地址中的域名为“完全限定” $
- 表示该字符串必须以该序列结尾, /i
- 使测试用例不敏感。 请注意,这假定每个电子邮件地址都是在一行上。
如果匹配的字符串可能在字符串中的任何位置,则放弃$
,并用s+
替换它(匹配一个或多个空格字符)
上一篇: Regex to detect one of several strings
下一篇: How to find out if the current application is an ASP.NET web app