正则表达式入门

正则表达式入门

正则表达式可以看作是文本处理中“查找/替换"的领域专用语言(Domain Specific Language,DSL),在信息安全专业课中有很多应用,比如数据安全验证、Web安全中的SQL注入防范、XSS攻击防范等。

正则表达式可以看作是种元知识,掌握了正则表达式,可以举一反三。在学习Vim,Grep,Java,Python,Ruby,Perl...时,看书学习时都可以省去正则表达式这一章。

在准备这篇博客时,范飞龙博士(博客微博)推荐了正则表达式30分钟入门教程,看了一下内容,正是想要写的,我就不重新发明轮子了。

正则表达式30分钟入门教程的目录如下:

  • 本文目标
  • 如何使用本教程
  • 正则表达式到底是什么东西?
  • 入门
  • 测试正则表达式
  • 元字符
  • 字符转义
  • 重复
  • 字符类
  • 分枝条件
  • 反义
  • 分组
  • 后向引用
  • 零宽断言
  • 负向零宽断言
  • 注释
  • 贪婪与懒惰
  • 处理选项
  • 平衡组/递归匹配
  • 还有些什么东西没提到
  • ...

按照我“从薄到厚,再从厚到薄”的读书方法,最后一定要有单页的cheatsheet或refcard出来。正则表达的cheatsheet可以从这里下载。其他cheatsheet列表:

工具列表

实践

正则表达式易学难精,学习最好的方法就是实践,实践,再实践
可以使用上面推荐的工具学习,也可以到实验楼使用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{4,}
  • 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{10}
  • 中国大陆邮政编码 [1-9]\d{5}
  • 中国大陆身份证号(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

参考资料


欢迎关注“rocedu”微信公众号(手机上长按二维码)

做中教,做中学,实践中共同进步!

rocedu



如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文


posted @ 2015-11-04 05:55  娄老师  阅读(...)  评论(... 编辑 收藏