blueyi's notes

Follow Excellence,Success will chase you!

0%

正则表达式练习题

正则表达式的练习题,多数来源于网络收集,由于网络上很多人给出的答案在我的测试用例中会有各种错误匹配,所以本文答案全部为我自己给出的答案,尽量保持题目难度由易到难。由于初学者,水平有所欠缺,难免有错误之处,所以如果你有更好的答案,如能给出,非常感谢!也非常欢迎指出错误!
测试文本可以通过在网上搜索邮箱,或者电话大全然后获取其网页源码作为测试文本,然后缺什么再加什么。
或者直接使用我练习时使用的一个文本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. 匹配非负整数: ((?!<-)[1-9]\d+)|((?<=\D)0(?=\D)) 不能包含000和-1.2的情况

  2. 匹配正整数: (?!<-|0)\d+ 不包含0开头的数字

  3. 区配非正整数:(-\d+)|((?<=\D)0(?=\D)) 需要包含单独0的情况

  4. 匹配负整数: -[1-9]\d* 不包括-012

  5. 匹配整数: -?\d+ 当然它会将1.2匹配为1和2

  6. 非负浮点数: (?<!-)(((?<!\d)[1-9]\d*)|(?<!\d)0)\.\d+ 不能包含-1.2, 02.2, 2., .2的情况,但有0.00

  7. 正浮点数: (?<!-)(((?<!\d)[1-9]\d*\.\d+)|((?<!0)0\.\d*[1-9]\d*)) 不能包含0.00,带有额外前导0及上述情况,但有0.00200

  8. 非正浮点数:((?<!0)0\.0+(?!\d))|-([1-9]\d*|0)\.\d+ 包含-0.0,但不能包括-00.0

  9. 负浮点数: -(([1-9]\d*\.\d+)|(0\.\d*[1-9]\d*)) 应该包括2.00的情况,但不包含0.00

  10. 浮点数: -?(((?<!\d)[1-9]\d*)|(?<!\d)0)\.\d+

  11. 由数字、字母组成的字符串A:^[\w]+$

字符串相关

提示:\w包含有汉字字符,当然也包括繁体等其他语系,汉字字符区间是[\u4e00-\u9fa5]

  1. 身份证号码验证:\d{17}[\dX]|\d{15}

  2. 长度为8-10位的用户密码,以字母开头,包含字母、数字、下划线的组合:[a-zA-Z]([a-zA-Z]|\d|_){7,9}

  3. 验证输入的只能是汉字:\b[\u4e00-\u9fa5]+\b

  4. 验证电子邮箱,由字母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]+

    这个匹配串效率较低,但准确度还算高,希望有更多更好的提出

  5. 匹配URL地址:http://[\w-]+\.[\w-]+.[\w]+[/\w.#&%?=-]*

  6. 匹配大陆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等

平衡组/递归匹配

暂时还不会使用,留空以后需要时再学习了来补充

Welcome to my other publishing channels