基础知识----正则
正则表达式简介
- 测试字符串的内的模式看字符串是否符合规范,就是数据验证
- 替换文本
- 在字符串内提取子字符串
正则表达式语法
一.普通字符
- +符号表示,前面的一个字符至少出现一次( >=1)
runoo+b
可以匹配runoob,runooob,runoooob等
- *符号表示,前面的一个字符可以出现0次或者一次或者多次( >= 0)
runoo*b
可以匹配runob,runoob,runooob等
- ?符号表示前面的一个字符最多只可以出现一次( 0次或者1次 )
colou?b
可以匹配colorb或者coloub
- [ ]符号表示匹配中括号里面所有的字符
[acb]
可以匹配字符串absxcvb里面a b c 字母
- [^ ]符号匹配除了中括号内的所有字符
[^acb]
可以区配acvbngdsrt中除了a c b的所有字母
- [A-Z]符号匹配所有大写字母
[A-Z]
可以匹配GgoogleAXC中的G A X C
- [a-z]符号匹配所有小写字母
[a-z]
可以匹配GoogleASXC中的o o g l e
- [^\r\n]符号匹配除换行符之外的任何单个字符
相当于 .
[^\r\n] = .
可以匹配asdfghj里面的所有(除了换行)
- [\s\S]可以匹配所有
\s
可以匹配所有的空白符,包括换行
\S
可以匹配所有的非空白符,不包括换行
- [A-Za-z0-9_]可以匹配所有字母,数字,下划线
相当于\w
[A-Za-z0-9_] = \w
二.非打印字符
- \cx x必须为A-Z或者a-z之一,可以匹配由x指明的控制字符
- \f匹配一个换页符
- \n匹配一个换行符
- \r匹配一个回车符
- \s匹配任何空字符,包括换行符,制表符,换页符
- \S匹配任何非空字符,不包括换行
- \t匹配一个制表符
- \v匹配一个垂直制表符
三.特殊字符
如果想要查找这些符号,则需要转义*
- $匹配所有字符串的结尾部分
- ()标记子表达式的开始与结束的位置
- *匹配前面的一个字符0次1次或者多次
- +匹配前面的一个字符1次或者多次
- .匹配除换行符\n,\t之外的任何单字符
- [ 标记一个中括号表达式的开始
- ?匹配前面的子字符0次或者1次
- ^匹配字符串的开始
- {标记限定符表达式的开始
- |指明两项之间的一个选择,相当于或
四.限定符
- *匹配前面的一个字符0次,一次或者多次
zo*
可以匹配z或者zo或者zooooo
- +匹配前面一个字符的1次或者多次
zo+
可以匹配zo或者zoooo,但是不可以匹配 z
- ?匹配前面一个字符的0次或者一次
do(es)?
可以匹配do或者does,doxy里面的do
- {n},n为一个非负整数,匹配确定的n次
o{2}
不可以匹配boy里面的o,但是可以匹配book里面的oo
- {n,}n为一个非负整数,至少匹配n次
o{2,}
可以匹配book或者fooooood里面的所有o,但是不可以匹配boy里面的o
- {n,m}n,m都为非负整数,其中n<=m,表示最少匹配n最多匹配m次
五.定位符
可以让你的正则表达式固定到行首或者行尾,正则表达式,可以出现在一个单词内也可以在一个单词的开头,或者一个单词的结尾
限定符和定位符不可以同时使用
- ^ 匹配字符串开始的位置
注意区分[^],这个是,[...]匹配除了里面的字母 - $匹配字符串结尾的位置
- \b匹配一个单词边界,即字与空格的位置
- \B非单词边界匹配
六.选择
- ?=
exp1(?= exp2):查找exp2前面的exp1
runoob(?= [\d+])
匹配数字前面的runoob字符串
- ?<=
(?<=exp2)exp1:查找exp2后面的exp1
(?<=[0-9]+)runoob
匹配数字后面的runoob
- exp1(?!exp2):查找后面不是exp2的exp1
runoob(?![0-9]+)
匹配后面不是数字的runoob
- (?<!exp2)exp1:查找前面不是exp2的exp1
(?<![0-9]+)runoob
匹配前面不是数字的runoob
七.反向引用
正则修饰符
-
i ignore-不区分大小写 ,将匹配设置为不区分大小写,即A和a没有区别
-
g global-全局匹配(一般是只匹配一行)
-
m multi line -多行显示 ,使边界字符^和$匹配每一行的开头和结尾多行,不是字符串的开头和结尾
-
s 特殊字符原点. 包含换行符\n 默认情况下的. 是不包含换行符的,但是有了s之后,中间就可以包含换行符\n
正则元字符
-
\ 转义字符
-
^ 匹配字符串开始的地方
-
$ 匹配字符串结束的地方
-
* 匹配0次,1次,或者多次
-
+ 匹配1次,或者多次
-
? 匹配0次或者1次
-
{n} 匹配n次,只可以n次
-
{n,} 匹配至少n次
-
{n,m} 匹配至少n次,至多m次
-
? 当他紧跟在其他限制符后面时,匹配都是非贪婪的。如果没有,是默认贪婪,就是尽可能多的去匹配
-
. 匹配除了\b \r,之类的单个字符。如果要匹配所有的\n,那么就要用(.|\n)
-
(pattern) 匹配pattern且获取注意匹配值
-
(?:pattern) 匹配pattern但不获取匹配结果
-
(?=pattern) 正向肯定预查 从任何匹配pattern的字符串开始的地方开始查找匹配字符串
-
(?!pattern) 正向否定预查 从不匹配pattern的字符串开始的地方开始查找字符串
-
(?<=pattern) 反向肯定预查
-
(?<!pattern) 反向否定预查
-
x|y 匹配x或y
-
[xyz]匹配其中任意的一个字符
-
[^xyz] 匹配字符串中所有没有包含的字符
-
[a-z] 匹配从a到z的任意字符
-
[^a-z] 匹配不在a到z的任意字符
-
\b 匹配单词边界 er\b 可以匹配never的er 但是不可以匹配verb 的er
-
\B 匹配非单词边界 er\B 可以匹配verb的er 但是不可以匹配never的er
-
\cx 匹配由x指明的控制字符不理解
-
\d 匹配一个数字 相当于[0-9]
-
\D 匹配一个非数字 相当于[^0-9]
-
\f 匹配一个换行页
-
\n 匹配一个换行符
-
\r 匹配一个回车符
-
\s 匹配所有空白字符,包括制表符,空格,换页符等等
-
\S 匹配所有非空白符
-
\w 匹配字母数字下划线 [0-9A-Za-z_] [\w.%+-]匹配字母数字下划线,以及.%+-其中任意个
-
\W 匹配非字母数字下划线 [^0-9A-Za-z_]
正则匹配规则
-
基本匹配模式
-
^once 匹配以once开始的字符串 例如 once upon a time
-
bucket$ 匹配以bucket匹配的字符串 ,例如 who kept all of this cash in a bucket
-
^bucket$ 表示只匹配bucket
-
如果没有^ 或者 $ ,那么只要整个字符中含有 ,那么就是匹配的 。例如once,就可以匹配 who kept all of his cash in a bucket
-
^\t 匹配字符串是否以制表符开头
-
-
字符簇
-
[1]是以小写字母开头
-
[^a-z] 表示非小写字母
-
-
确认重复出现
a-z ↩︎