正则表达式是什么?
正则表达式是一种强大的文本处理工具。
正则表达式的定义
制定了一个规则,通过这个规则匹配一些符合的字符串。
正则表达式的语法
- 普通字符
字母,数字,汉字,下划线,以及没有特殊定义的标点符号,都是普通字符。表达式中的普通字符,在匹配字符串的时候,匹配与子相同的一个字符。
- 简单的转义字符
\n 代表换行符 \t 制表符 \\ 代表 \ 本身 \^ , \$ , \. , \( , \) , \{ , \} , \? , \+, \* , \| , \[ , \] 匹配这些字符本身 - 标准字符集合
\d 0~9的任意一个数字 \w 任意一个字母或数字或下划线,也就是a~z,A~Z,0~9其中的一个 \s 包括空格,换行符,制表符等空白字符中的任意一个 . 小数点可以匹配任意一个字符(除了换行符),如果要匹配包括“\n”在内的任意字符,一般用[\s\S] - 自定义字符集
[abc@] 匹配a,b,c和@ [^abc] 匹配除了abc之外的任意字符 [f-k] 匹配f到k之间的任意字符 [^A-S3-5] 匹配A到S和3到5之外的任意字符 注意
- 正则表达式的特殊符号,被包含到中括号中会失去其特殊意义,表示其本身。除了"^","-"之外。
- 标准字符集合,除了.以外,如果被包含于中括号,自定义字符集将包含该集合。比如:[\d.\-+]将匹配数字,小数点,+,-
- 量词
贪婪模式(默认),次数匹配的越多越好{n} 表达式重复n次 {m,n} 表达式至少重复m次,至多重复n次 {m,} 表达式至少重复m次 ? 表达式匹配0到1次,相当于{0,1} + 表达式至少出现一次,相当于{1,} * 表达式不出现或出现任意次,相当于{0,}
非贪婪模式,在后面加?,次数匹配的越少越好
例子:
/d{6} = /d/d/d/d/d/d,匹配连续的6个数字字符串
/d{3,6}? 匹配3到6的连续字符串,若有超过6个的 字符串,匹配3个,就会匹配下一段
/d{3,6} 与上面相反,会优先匹配6个,
- 字符边界
^ 匹配字符串开始的地方 $ 匹配字符串结束的地方 \b 匹配但单词的一个边界,就是前面的和后面的不全是\w - 选择符和分组
|
分支结构左右两边表达式或的关系,匹配左边或右边 ()
捕获组(1)在被修饰匹配次数的时候,括号中的表达式作为一个整体被修饰
(2)去匹配结构的时候,括号中的表达式匹配的内容可以被单独得到
(3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序 从一开始编号(?:Expression) 一些表达式中,不得不使用(),但又不需要保存()子表达式匹配的内容,这时就可以用非捕获组 - 预搜索(零宽断言)
只进行子表达式的匹配,匹配内容不计入最终结果,是零宽度的
这个位置应该符合某个条件,判断当前后是否符合指定条件,但不匹配前后字符。
(?=exp) 后面的表达式exp (?<=exp) 前面的表达式exp (?!exp) 后面不能匹配的表达式exp (?<!exp) 前面不能匹配的表达式exp - 反向引用(\nnn)
每对括号会分配一个编号,根据左括号的顺序。
通过反向引用,可以对分组已经捕获的字符串进行引用
\nnn 就是 \1,\2…\100等正则表达式的匹配模式
- IGNORECASE 忽略大小写模式
—匹配时忽略大小写
—默认情况下正则表达式是要区分大小写的 - SINGLELINE 单行模式
—整个文本看作一个字符串,只有一个开头和一个结尾
—使用小数点可以匹配包括换行符在内的任意字符 - MULTILINE 多行模式
—每行都是一个字符串,都有开头和结尾
—在此模式下,如果仅需匹配字符串开始和结束的地方,可以使用\A和\Z
- IGNORECASE 忽略大小写模式