正则表达式基本语法
基本介绍
- 学习工具:https://www.lanzous.com/i5vpdsh
- 在线学习工具:https://tool.chinaz.com/regex/
- 正则表达式功能:匹配符合某种条件的文本
语法01 - 基本字符
普通字符
转义字符
\t, \\, \n, \|, \^, \+, \*, \?, \(, \), \[, \], \{, \}
标准字符集合(大写表示取补集)
name | function |
---|---|
\d | 匹配1个数字 |
\w | 匹配1个字母或数字或下划线 |
\s | 匹配1个空格或制表符或换行符 |
. | 匹配任意1个字符(换行符除外) |
[\s\S] | 匹配任意1个字符 |
- 自定义字符
[]: 方括号可以匹配括号内任意一个字符
name | function |
---|---|
ab5@ | a、b、c或@ |
[^abc] | 除abc之外的任意字符(包括换行符) |
[f-k] | f-k中的任意字符 |
[^a-g0-3] | 除a-g和0-3之外的任意字符(包括换行符) |
- 正则表达式中的特殊符号,被包含到中括号中,就会失去特殊意义,除了^,-之外
- 标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将会包含该合,如:
- [\d.\-+] : 数字 小数点 + -
语法02 - 量词
修饰匹配字数的特殊符号
- 贪婪模式: 尽可能多的匹配字符
- 非贪婪模式:尽可能少的匹配字符
- 在量词修饰后面添加问号,表明非贪婪模式
name | function |
---|---|
{n} | 表达式重复n次 |
{m,n} | 表达式至少重复m次,最多重复n次 |
{m, } | 表达式至少重复m次 |
? | 表达式出现0次或1次,相当于{0,1} |
+ | 表达式至少出现1次,相当于{1,} |
* | 表达式出现任意次或不出现,相当于{0,} |
注: 没有最多重复n次,即没有{,n}这种写法
语法03 - 字符边界
匹配的是符合某种条件的位置,是零宽的
name | function |
---|---|
^ | 与字符串开始的位置匹配 |
$ | 与字符串结束的地方匹配 |
\b | 匹配一个单词边界,\b位置前面的字符和后面的字符不全是\w |
例::memo: \b
语法04 - 正则表达式的匹配模式
- IGNORECASE 忽略大小写
- 匹配时忽略大小写
- 默认情况下,正则表达式是要区分大小写的
- SINGLINE 单行模式
- 整个文本看作一个字符串,只有一个开头,一个结尾。
- 该模式下,小数点”.”可以匹配包含换行符(\n)在内的任意字符。
- MULTILINE多行模式
- 每行都是一个字符串,都有开头和结尾。
- 在指定了 MULTILINE之后,如果仅需要匹配单行模式下的字符串开始和结束位置,可以使用\A和\Z
语法05 - 选择符和分组
expression | name | function |
---|---|---|
| | 分支结构 | 左右两边表达式之间”或”关系,匹配左边或者右边分支结构 |
() | 捕获组 | (1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰哺获组 (2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 (3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本 |
(?:expression) | 非捕获组 | 一些表达式中,不得不使用(),但又不需要保存()中子表达式四配的内容,这时可以用非捕获组来抵消使用()带来的副作用。 |
语法06 - 反向引用
每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。
通过反向引用,可以对分组已捕获的字符串进行引用
语法07 - 预搜索(零宽断言)
- 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度
- 这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。
- 正则表达式匹配过程中,如果子表达式配到的是字符内容,而非位置,并被保存到最终的匹配结果中,那么就试为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者配的内春并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。
name | function |
---|---|
(?=exp) | 断言此位置的后面能匹配表达式exp |
(?<=exp) | 断言此位置的前面能匹配表达式exp |
(?!exp) | 断言此位置的后面不能匹配表达式exp |
(?<!exp) | 断言此位置的前面不能匹配表达式exp |
例: