正则表达式入门
正则表达式入门
正则表达式可以看作是文本处理中“查找/替换"的领域专用语言(Domain Specific Language,DSL),在信息安全专业课中有很多应用,比如数据安全验证、Web安全中的SQL注入防范、XSS攻击防范等。
正则表达式可以看作是种元知识,掌握了正则表达式,可以举一反三。在学习Vim,Grep,Java,Python,Ruby,Perl...时,看书学习时都可以省去正则表达式这一章。
在准备这篇博客时,范飞龙博士(博客,微博)推荐了正则表达式30分钟入门教程,看了一下内容,正是想要写的,我就不重新发明轮子了。
正则表达式30分钟入门教程的目录如下:
- 本文目标
- 如何使用本教程
- 正则表达式到底是什么东西?
- 入门
- 测试正则表达式
- 元字符
- 字符转义
- 重复
- 字符类
- 分枝条件
- 反义
- 分组
- 后向引用
- 零宽断言
- 负向零宽断言
- 注释
- 贪婪与懒惰
- 处理选项
- 平衡组/递归匹配
- 还有些什么东西没提到
- ...
按照我“从薄到厚,再从厚到薄”的读书方法,最后一定要有单页的cheatsheet或refcard出来。正则表达的cheatsheet可以从这里下载。其他cheatsheet列表:
工具列表
- awk
- grep
- []RegexTester(http://deerchao.net/tools/regex_tester/index.htm)
- Regex buddy
- regexpal
- Regular Expression Tester(C#)
- Regular Expression Tester(Firefox插件)
- Regular Expression Tester(Perl)
- Regular Expression Tester(PHP)
- sed
- vim
- wingrep
- ...
实践
正则表达式易学难精,学习最好的方法就是实践,实践,再实践
可以使用上面推荐的工具学习,也可以到实验楼中使用grep测试。
常用正则表达式
- 网址(URL) :[a-zA-z]+://[^\s]*
- IP地址(IP Address): ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
- 电子邮件(Email) :\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
- QQ号码:[1-9]\d
- HTML标记(包含内容或自闭合) :
<(.*)(.*)>.*<\/\1>|<(.*) \/>
- 密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) 😦?=^.{8,}\()(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*\)
- 日期(年-月-日): (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
- 日期(月/日/年) ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
- 时间(小时:分钟, 24小时制) 😦(1|0?)[0-9]|2[0-3])😦[0-5][0-9])
- 汉字(字符): [\u4e00-\u9fa5]
- 中文及全角标点符号(字符) [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
- 中国大陆固定电话号码 (\d{4}-|\d{3}-)?(\d{8}|\d{7})
- 中国大陆手机号码 1\d
- 中国大陆邮政编码 [1-9]\d
- 中国大陆身份证号(15位或18位) \d{15}(\d\d[0-9xX])?
- 非负整数(正整数或零) \d+
- 正整数 [0-9][1-9][0-9]
- 负整数 -[0-9][1-9][0-9]
- 整数 -?\d+
- 小数 (-?\d+)(.\d+)?
- 不包含abc的单词 \b((?!abc)\w)+\b
参考资料
- 学习正则表达式 (电子版,Introducing Regular Expressions)
- 正则表达式必知必会(Sams Teach Yourself Regular Expressions in 10 Minutes)
- 精通正则表达式 (Mastering regular expressions)
- 正则表达式经典实例(Regular Expression Cookbook)
欢迎关注“rocedu”微信公众号(手机上长按二维码)
做中教,做中学,实践中共同进步!
-
版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”