使用元字符
匹配数字:
\d |
[0-9] |
\D |
[^0-9] |
匹配字母数字
\w |
[0-9a-zA-Z_] 注意:包括下划线 |
\W |
[^0-9a-zA-Z_] |
匹配空白字符
\s |
任何空白字符[\f\n\r\t\v] |
\S |
任何非空白字符[^\f\n\r\v] |
[\b] |
匹配退格符是一个特例 |
匹配十六进制是使用\x前缀加数字 \x0A 匹配\n
八进制使用\0前缀加数字
例子:
Ø 匹配邮箱:[\w\.]+@[\w\.]+\.\w+ 但不是最好的,不完整
Ø 邮箱第一字母必须是字母或下划线,因此符合要求的的模式是:
\w*[\w.]+@[\w.]+\.\w+
Note:当在[]中使用.、+、*等元字符时会自动将其解释为普通字符,因此[\w.]和[\w\.]是一样的。
重复匹配
匹配一个或多个 +
匹配零个或多个 *
匹配零个或一个 ?
匹配重复次数 {n}、{n,m}、{n,}至少n次、{ ,m}最多m次【包含n,m】
例子:
Ø 匹配一个网页地址: https?://[\w./]+或http[s]?://[\w./]+
Ø 匹配空行(在windows中空格是\n\r,在Linux/Unix中空格是\n),单独匹配各自系统中的空行是:Windows—‘\r\n \r\n’ Linux/Unix—‘\n\n’;因此使用一个模式可以表示为: [\r]?\n[\r]?\n
Ø 检查日期格式是否正确(对日期值的检查应该在此之前确定):
\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
防止过度匹配:+、*都是贪婪性,会按照最多的去匹配;要使用懒惰型版本的元字符只需要给贪婪型元字符加上?后缀即可。
+?、*?、{n,}?是各自贪婪型元字符对应的懒惰型元字符版本
Ø 将HTML中的<B></B>标签中的内容匹配出来
<B>AK</B> and <B>HI</B>
模式1:[<B/>].*[</B>] 过度匹配
模式2:[<B/>].*?[</B>]
位置匹配
元字符 |
含义 |
\bword\b |
匹配单词边界,匹配单词长度为4,仅仅匹配单词word本身 his cap and cape from capsized 例子: \bcap\b 将匹配cap \bcap 将匹配以cap开头的任意单词 cap\b 匹配以cap结尾的任意单词 |
\B\B |
不匹配单词边界, colors and – coded pass-key 例子: \B-\B将匹配一个前后都不是单词边界的连字符 pass-key |
字符串的开头:^ 字符串的结尾:$
分行匹配模式:?m (multiline mode) |
使用行分隔符后,^除了匹配字符串的开头外,还能够匹配行分隔符(换行符)后面的开始位置,同样$还能够匹配行分隔符后面的结束位置。(?m)必须出现在整个模式的前面 例子: 判断某一文件是不是xml文件: ^\s<\?xml .*\?> </html>标签后面不应该有其他内容了,进行合法检查: </[Hh][Tt][Mm][Ll]>\s*$ 匹配JavaScript中的所有注释: (?m)^\s*//.*$ |
使用子表达式
元字符和字符是正则表达式的基本构件。子表达式是尅嵌套的,
例子
Ø 在html中使用 (None-breaking space)表示非换行型空格,需要匹配一个或多个 ;但是使用模式’ {2,}’是不对的,需要对整体进行匹配因此使用括号“()”将其括起来做一个独立的元素使用,该模式就是子表达式,通常使用小括号括起来。( ){2,}
Ø 匹配IP地址格式:
模式1:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
模式2:(\d{1,3}.){3}\d{1,3}
Ø 把用户记录中的年份数字打印出来
日志格式:
ID:042
SEX:M
DOB:1996-08-17
Status:Active
匹配模式:(19|20)\d{2}
Ø 使用子表达式的嵌套,匹配IP地址格式且匹配合法的IP第地址,在构造正则表达式一定要清楚相匹配什么,不像匹配什么:
匹配IP地址:任何一个1位或2位数字、任何一个以1开头的3位数字、任何一个以2开头、第二位数字在0~4的3位数字、任何一个以25开头,第3位数字在0~5之间的3为数字
模式:(((\d{1,2})|{1\d{2})|(2[0-4]\d)(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4)|(25[0-5]))