正则表达式的练习题,多数来源于网络收集,由于网络上很多人给出的答案在我的测试用例中会有各种错误匹配,所以本文答案全部为我自己给出的答案,尽量保持题目难度由易到难。由于初学者,水平有所欠缺,难免有错误之处,所以如果你有更好的答案,如能给出,非常感谢!也非常欢迎指出错误!
测试文本可以通过在网上搜索邮箱,或者电话大全然后获取其网页源码作为测试文本,然后缺什么再加什么。
或者直接使用我练习时使用的一个文本Test.txt
国外某网站提供的两个测试文件可供使用:
英文单词列表:http://qntm.org/files/re/words.zip
英语电子书The Time Machine by H. G. Wells
: http://www.gutenberg.org/cache/epub/35/pg35.txt
如果该网站无法访问,可以从网站搜索任意英文电子书的一部分作为测试用例。
数字相关
以下浮点数与存储无关,仅指带小数点的数
匹配非负整数:
((?!<-)[1-9]\d+)|((?<=\D)0(?=\D))
不能包含000和-1.2的情况匹配正整数:
(?!<-|0)\d+
不包含0开头的数字区配非正整数:
(-\d+)|((?<=\D)0(?=\D))
需要包含单独0的情况匹配负整数:
-[1-9]\d*
不包括-012匹配整数:
-?\d+
当然它会将1.2匹配为1和2非负浮点数:
(?<!-)(((?<!\d)[1-9]\d*)|(?<!\d)0)\.\d+
不能包含-1.2, 02.2, 2., .2的情况,但有0.00正浮点数:
(?<!-)(((?<!\d)[1-9]\d*\.\d+)|((?<!0)0\.\d*[1-9]\d*))
不能包含0.00,带有额外前导0及上述情况,但有0.00200非正浮点数:
((?<!0)0\.0+(?!\d))|-([1-9]\d*|0)\.\d+
包含-0.0,但不能包括-00.0负浮点数:
-(([1-9]\d*\.\d+)|(0\.\d*[1-9]\d*))
应该包括2.00的情况,但不包含0.00浮点数:
-?(((?<!\d)[1-9]\d*)|(?<!\d)0)\.\d+
由数字、字母组成的字符串A:
^[\w]+$
字符串相关
提示:\w
包含有汉字字符,当然也包括繁体等其他语系,汉字字符区间是[\u4e00-\u9fa5]
身份证号码验证:
\d{17}[\dX]|\d{15}
长度为8-10位的用户密码,以字母开头,包含字母、数字、下划线的组合:
[a-zA-Z]([a-zA-Z]|\d|_){7,9}
验证输入的只能是汉字:
\b[\u4e00-\u9fa5]+\b
验证电子邮箱,由字母a~z(不区分大小写)、数字0~9、点、减号或下划线组成;只能以数字或字母开头和结尾,例如:beijing.2008;用户名长度为4~18个字符。域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”。 域名中字母不分大小写。域名最长可达67个字节。此处以英文域名举例,当然邮箱还没有支持中文用户名的。
1
2
3
4
5(\d|[a-zA-Z])+((\d|[a-zA-Z])|\.|\-|_)*(\d|[a-zA-Z])+@(\d|[a-zA-Z])+(\d|[a-zA-Z]|\-)*(\d|[a-zA-Z])+\.[a-zA-Z]+
```
当然现在已经支持中文顶级域名了
```shell
(\d|[a-zA-Z])+((\d|[a-zA-Z])|\.|\-|_)*(\d|[a-zA-Z])+@[\w]+[\w-]*[\w]+\.[\w]+这个匹配串效率较低,但准确度还算高,希望有更多更好的提出
匹配URL地址:
http://[\w-]+\.[\w-]+.[\w]+[/\w.#&%?=-]*
匹配大陆11位的手机号码,忽略1后面跟的特定数字,或者4位区号+7/8位本地号的固话,不含短号,号码可以由
-
或者()
连接1
((?<!\d)1\d{10}(?!\d))|((?<!\d)\d{4}-?\d{7,8}(?!\d))|((?<!\d)\(\d{4}\)\d{7,8}(?!\d))
7.匹配所有的空行:
1 | ^[\s]*\n |
如果能把以上这几个题都写完整并且能够通过我提供的文本校验,应该算是已经会用基础了,日常使用应该够用了。
如果还想练习更多问题,可以到一些社区搜索相应标签,比如:stackoverflow, quora, csdn等
平衡组/递归匹配
暂时还不会使用,留空以后需要时再学习了来补充