匹配单个字符
匹配任意字符
‘.’ 字符
- 表示一个除换行符 \n外的任意字符,字母,数字,以及.字符本身
- 可以多个连用表差哦是匹配多个任意字符
- ‘\ .’表示’.’本身
.a.\. :表示a前后各有一个任意字符之后是'.'本身如:nab.com
匹配一组字符
字符 [ ]
‘[ ]’:定义一个字符集匹配’[ ]’中的任意一个字符
[efg].a.\. :表示[e或f或g][任意字符][a][任意字符]. 如:eha.com;fka.com;kega.com等
不区分大小写:[Rr]
数字:[0123456789]
大写字母:[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
小写字母:[abcdefghijklmnopqrstuvwxyz]
大小写字母:[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]
字符 ‘-‘
‘-’ :表示字符区间
数字:[0-9]
大写字母:[A-Z]
小写字母:[a-z]
大小写字母:[A-z] //匹配ASCII字符的所有字母,包含了大小写字母中的[,^等字符
字母数字:[A-Za-z0-9]
RGB值:#[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]
取非字符 ‘^’
‘^’ :取非排除一部分不需要的字符,作用于字符集中的全部字符
非数字:[^0-9]
非大写字母:[^A-Z]
非小写字母:[^a-z]
非字母:[^A-z] //匹配ASCII字符的所有字母,包含了大小写字母中的[,^等字符
非字母数字:[^A-Za-z0-9]
元字符
元字符 :在正则表达式中有着特俗含义的字符,不能代表自己本身,代表自身需要进行转义
转义字符’\’
‘\’ 将特俗的元字符转化表示字符本身,’\’字符不能单独使用.其后必须跟着另一个字符
正则表达式中常用的转义字符
$ :匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$
():标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用'\(' 和'\)'
* :匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
+ :匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
. :匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \.
[]:标记一个中括号表达式的开始。要匹配 [或],请使用 \[或\]
? :匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?
\ :将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”
^ :匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^
{}:标记限定符表达式的开始。要匹配 {,请使用 \{
| :指明两项之间的一个选择。要匹配 |,请使用 \|
空白元字符
‘\r\n’ 回车换行
Windows系统中两文本行之间的空白行:'\r\n\r\n'
Linux系统中两文本行之间的空白行:'\n\n'
匹配特定的字符类别
匹配数字/非数字
\d :任意一个数字字符;等价:[0-9]
\D :任意一个非数字;等价:[^0-9]
匹配字母和数字/非字母和非数字
\w :任何一个字母数字下划线;等价:[a-zA-Z0-9_]
\W :任何一个非字母数字下划线;等价:[^a-zA-Z0-9_]
匹配空白字符/非空白字符
\s :任何一个空白字符;等价:[\f\n\r\t\v]
\S :任何一个非空白字符;等价:[^\f\n\r\t\v]
匹配十六进制或八进制
\x :匹配十六进制 如:\x0A:表示ASCII码中的10即'\n'换行
\0 :匹配八进制 如:\011 :表示ASCII码中的9即'\t'制表符
匹配十六进制的Unicode字符
\uxxxx :查找以十六进制数 xxxx 规定的 Unicode 字符
POSIX字符类(unix系统中使用)
正则表达式中的修饰符
修饰符 :可以在全局搜索中忽略大小写
i - 修饰符是用来执行不区分大小写的匹配。
g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)
m - 用于多行匹配的全文搜索
重复匹配
匹配一个或多个字符 ‘+’
‘+’ :匹配一个或多个(至少一个)字符/字符集,’+’表示’+’本身
\w+@\.\w+ :表示邮箱
匹配零个或多个字符 ‘*’
‘*’ :匹配零个或多个字符/字符集
\w+[\w.]*@[\w.]+\.\w+ :表示邮箱
匹配零个或多个字符 ‘?’
‘?’ :匹配零个或一个字符/字符集
限定重复匹配的次数 ‘{n}’
‘{n}’ :表示字符/字符集重复出现n次
RGB的值 :[A-Fa-f0-9]{6} :[A-Fa-f0-9]重复出现6次
限定重复匹配的次数区间 ‘{n,m}’
‘{n,m}’ :表示字符/字符集至少重复n次最多重复m次
[\w]{6,8} :6到8位字母数字下划线
限定至少重复的次数 ‘{n,}’
‘{n,}’ :表示字符/字符集至少重复出现n次
[\w]{6,} :至少6位字母数字或下划线
防止过度匹配
贪婪型元字符
贪婪型元字符:会从文本的开始到末尾一直进行匹配
懒惰型元字符
懒惰型元字符:匹配尽可能少的字符,匹配到即停止匹配
防止过度匹配即借助懒惰型元字符进行匹配
测试文本:<b>12345</b>and<b>646582</b>
正则表达式:<[Bb]>.*</[Bb]>
结果:<b>12345</b><b>646582</b>匹配全部文本
正则表达式:<[Bb]>.*?</[Bb]>
结果:<b>12345</b>和<b>646582</b>匹配两个需要的部分
位置匹配
单词边界 ‘\b’
‘\b’ :匹配单词的边界(单词和符号之间的边界)
符号:包括中文,英文,空格,换行制表符
单词:包括中文字符,英文字符,数字
测试文本:The cat scattered his food all over the room
正则表达式: cat
结果找到:cat 和s[cat]tered
正则表达式: \bcat\b
结果:cat 匹配单词cat
正则表达式: \bcat
结果:cat 匹配cat开头的单词
正则表达式: cat\b
结果:cat 匹配cat结尾的单词
非单词边界 ‘\B’
‘B’ :匹配非单词边界(单词与单词,符号与符号之间的边界)
字符串边界 ‘^’和’$’
‘^’ :定义字符串的开头,放在字符/或字符集的开头
‘$’ :定义字符串的结尾,放在字符或字符集的结尾
^\s*<\?xml.*\?> :检测是否是xml文件
</[Hh][Tt][Mm][Ll]>\s*$ :检测html文档是否正确
分行匹配模式 ‘?m’
‘?m’ :使用分行匹配模式 ‘^’和’$’可以对每行都进行开头和结尾的匹配
^/s*//.*$ :找出全部的注解://
子表达式
子表达式字符 ‘( )’
‘( )’ :表示子表达式的开始和结束
(\d{1,3}\.){3}\d{1,3} :匹配IP地址
或字符 ‘|’
‘|’ :表示或的意思
(19|20)\d{2} :匹配年份19几几年或20几几年
19|20\d{2} :匹配年份19开头的或者20开头的任意4位
子表达式的嵌套
((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5])\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))
正确的Ip正则,Ip的每一组数字须小于255
回溯引用
前后一致匹配
回溯引用:指的是模式的后半部门引用前半部分中定义的子表达式
[ ]+(\w)+[ ]+\1 :前面子表达式(\w)匹配的是什么,后面\1同样匹配该字符/字符集
<[Hh]([1-6])>.*?</[Hh]\1> :匹配标题H1到H6
注意:
回溯引用只能用来引用模式里的子表达式(用'( )'括起来的正则表达式片段)
回溯引用匹配下哦能1开始技术如:\1、\2,第0个匹配(\0)可以用来代表整个正则表达式