正则表达式2-邮箱的故事
2016-03-02 10:43
169 查看
匹配邮箱
在《正则表达式1-字符串匹配种》,我们知道如何去匹配名称了,现在来看看一个更复杂的例子,邮箱吧。405062429是邮箱名称,qq.com是域名。
点
我们如何匹配呢?看看这个行不行'405062429@qq.com'.match(/\w+@\w+.\w+/)
好像可以,但是‘405062429@qq+com‘也能被匹配,这是因为我们用到了'.'.
.在正则表达式中表示元字符(Metacharacter),是具有特殊含义的字符,表示查找单个字符,除了换行和行结束符。
在这里我们需要Escape the “.” with a backslash to match a literal period。使用.转译一下。
所以这样写吧:
'405062429@qq.com'.match(/\w+@\w+\.\w+/)
分组
我们邮箱的顶级域名(Top-level Domain)不一定是com怎么办。看看下面这样写可以吗?/\w+@\w+\.com|net|org|edu/i
这样的话并不能把com和net,org,edu放在一起,而是把
\w+@\w+\.com和后面的域名放在一起了,显然不对,这时候就要用到分组。像下面这样写:
/\w+@\w+\.(com|net|org|edu)/i
部分匹配
上面这样已经可以工作的很好了,可是还是有部分匹配的问题。比如'405062429@qq.comXXX'.match(/\w+@\w+\.(com|net|org|edu)/i)也会返回(我们希望精确匹配,这种情况应该返回null)。
如何解决这个问题呢:
/^\w+@\w+\.(com|net|org|edu)$/i
^表示在一行的开头就开始匹配,start matching at the beginning of the line
$表示在一行的结尾结束匹配,stop matching at the end of the line
说的明白点就是,比如
/^shen$/,那么
shen之前没有任何东西,之后也没有任何东西,那么就只能匹配
shen。这样就可以解决部分匹配的问题了。
相关文章推荐
- 获取文本的值
- 初学者级java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
- maven工程引入的时候提示Missing artifact ...并且项目上有一个感叹号
- 移动页面【点击穿透】问题
- iOS 控制台unicode转中文
- httpd-2.4.18+php-5.6.18+nagios-4.1.1+ nagiosgraph-1.5.2 installation on rehl6.4
- 使用chkconfig批量关闭服务
- Linux内核编码风格要求,该文档位于Linux内核下的Documentation/CodingStyle
- Mysql数据库DML操作delete不支持表的别名操作
- c++中cout、cerr、clog的区别
- 文件夹路径 String savePath ="D:\\web\\new\\DownLoad";
- 项目经理的一些典型要求
- bzoj2594
- linux配置SSH免密码登陆方法
- 【转】怎么查看电脑支持的最大内存?
- 正则表达式1-字符串的故事
- 在C代码中调用C++接口
- ZooKeeper概述(转)
- git入门(6)-Git checkout 和git branch分支的创建和删除
- ATS代理缓存工作机制流程图(自画)