正则表达式入门

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为 “元字符” )。

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

简单讲

这学期在学习 C++11 的时候用到了正则表达式,很直观的体验是正则表达式能帮助自己提升效率,可以少些很多代码,十分简单与高效。

正则表达式的教程可以完全参考 菜鸟教程 上的内容,虽然那里知识点写得有些混乱,但是还是比较容易学习的。这里就不再重复整理了,只列出有些没有涉及的以及经常要用到的知识点。

  • () 标记一个子表达式的开始和结束位置。
  • * 匹配前面的子表达式零次或多次。
  • + 匹配前面的子表达式一次或多次。
  • ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
  • . 匹配除换行符 \n 之外的任何单字符。
  • {n} n 是一个非负整数。匹配确定的 n 次。
  • [xyz] 字符集合。匹配所包含的任意一个字符。
  • \b 匹配一个单词边界,即字与空格间的位置。
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
  • \d 匹配一个数字字符。等价于 [0-9]
  • \w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]

补充

  • (?i) 表示所在位置右侧的表达式开启忽略大小写模式。
  • (?s) 表示所在位置右侧的表达式开启单行模式。
  • (?m) 表示所在位置右侧的表示式开启指定多行模式。

举例

  • /\b([a-z]+) \1\b/gi 一个单词连续出现的位置。\1 则是代表与第一个小括号中要匹配的内容相同。g 代表全局搜索。i 代表大小写不敏感。
  • /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 将一个 URL 解析为协议、域、端口及相对路径。
  • /^\s*$/ 匹配空行。
  • /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 匹配 HTML 标记。
  • /^[a-z0-9](\w|\.|-)*@([a-z0-9]+-?[a-z0-9]+\.){1,3}[a-z]{2,4}$/i 检测邮箱地址正确性。
  • /^[\u4e00-\u9fa5A-Za-z0-9-_]*$/ 用户名检测,只允许包含中英文、数字、下划线和横杠。
  • /(?=.*[a-z])(?=.*\d)(?=.*[#@!~%^&*])[a-z\d#@!~%^&*]{8,16}/i 密码检验,只允许包含数字字母和特殊符号,长度在 8-16 位之间。