串:
name@gmail.com
检查:
@ .com
我的代码
if [[ $word =~ "@" ]] then if [[ $word =~ ".com" || $word =~ ".ca" ]]
我的问题
name@.com
上面的例子通过了,这不是我想要的。 如何检查“@”和“.com”之间的字符(1或更多)?
你可以使用一个非常非常基本的正则表达式:
[[ $var =~ ^[az]+@[az]+\.[az]+$ ]]
它看起来像这样的字符串:
at least one az char @ at least one az char . at least one az char
它可以得到像你想要的复杂,例如看电子邮件检查正则表达式与bash脚本 。
$ var="a@b.com" $ [[ $var =~ ^[az]+@[az]+\.[az]+$ ]] && echo "kind of valid email" kind of valid email $ var="a@.com" $ [[ $var =~ ^[az]+@[az]+\.[az]+$ ]] && echo "kind of valid email" $
为什么不去像Perl的其他工具:
> echo "x@gmail.com" | perl -lne 'print $1 if(/@(.*?)\.com/)' gmail
glob模式是: [[ $word == ?*@?*.@(com|ca) ]]
?
匹配任何单个字符, *
匹配零个或多个字符
@(p1|p2|p3|...)
是与给定模式匹配的扩展匹配模式。 这要求:
shopt -s extglob
测试:
$ for word in @.com @a.ca a@.com a@b.ca a@b.org; do echo -ne "$word\t" [[ $word == ?*@?*.@(com|ca) ]] && echo matches || echo does not match done @.com does not match @a.ca does not match a@.com does not match a@b.ca matches a@b.org does not match