正则表达式
用来匹配需要的字符串。
1、标准字符集合
表达式:
\d:任意数字字符。 \D:任意除了数字以外的字符。
\w:任意字母、数字、下划线字符。 \W:任意除了字母数字下划线的字符。
\s:任意空白字符。 \S:任意空白字符以外的字符。
. :任意除了换行符的字符。
例子:
表达式:\d\d\d 匹配:三个连续数字
表达式:a\da 匹配:字符串“a数字a”
2、自定义字符集合
格式:
使用中括号括起来表示:[ 需要匹配的内容 ],^表示取反,-表示连续。
例子:
表达式:[1a8k] 匹配:字符串中的”1,a,8,k“
表达式:[1-8] 匹配:字符串中的“1到8中的任意一个字符”
表达式:[^a-j] 匹配:字符串中的“除了a-j之间的一个字符”
3、量词
在表达式后面加上量词,表示表达式重复几次。
格式:
{n}、{n,m}、{m,}、?、+、*
例子:
表达式:a\d{2}b 等价于:a\d\db 匹配:“a11b、a12b、a13b、a14b、..........
表达式:\d{1,4} 等价于:\d 或 \d\d 或 \d\d\d 或\d\d\d\d 匹配:1个到4个连续的数字,优先匹配数量最多的字符串(4个连续)=贪婪模式
表达式:\d{1,4}? 等价于:\d 或 \d\d 或 \d\d\d 或\d\d\d\d 匹配:1个到4个连续的数字,优先匹配数量最少的字符串(1个连续)=非贪婪模式
表达式:\d{1,} 匹配:1个或者无数个连续的数字。
表达式:a\d?b 等价于:a\d{0,1}b 匹配:1个数字或0个数字,比如:“ab、a1b、a6b"
表达式:a\d+b 等价于:a\d{1,}b 匹配:1个数字及1个以上的连续数字,比如:“a1b、a111b、a123456b”
表达式:a\d*b 等价于:a\d{0,}b 匹配:0个及0个以上的连续数字,比如:“ab,a111b,a312321b”
4、字符边界
匹配符合条件的位置(零宽),不是字符。
格式:
^ 匹配位置:字符串开头
$ 匹配位置:字符串结尾
\b 匹配位置:前面的字符和后面的字符不全是\w(字符数字下划线)
例子:
表达式:^a 匹配到:开头为a的字符a。
表达式:$a 匹配到:字符串结尾为a的字符a。
表达式:love\b 匹配到:后面不是字符数字下划线的love。
表达式:\blove\b 匹配到:前后都不是字符数字下划线的love。
5、匹配模式
- 忽略大小写模式:大小写不分。
- 单行模式:把整个文档当作一个字符串。
- 多行模式:一行就是一个字符串。
多行模式下,匹配整个文档的开头位置使用\A,结尾位置为\Z。
6、选择符和分组、反向引用
格式:
| 表示:或
() 表示:用来组织表达式了,它的匹配结果会被存下来,可被反向引用
(?:) 表示:非捕获组。
\n 表示反向引用被捕获的字符串,n为1开始的编号,由左至右,第一个 ( 的捕获组通过\1引用)。
例子:
表达式:pig|cat 匹配到:pig或者cat字符串。
表达式:(\d{2}) 匹配到:两个连续的数字。
表达式:(\d{2})\1 匹配到:相同的两个连续的数字,例如“1919、1010、3232”。
表达式:(a\d\d(bb))\2 匹配到:a+两个连续数字+bb+bb 。
表达式:(\d{2})\1 匹配到:两个连续的数字,非捕获组的信息不会存储下来,引用不到。
7、预搜索
搜索指定位置。
格式:
(?=字符串) 匹配:后面为指定字符串的位置。
(?!字符串) 匹配:后面不为指定字符串的位置。
(?<=字符串) 匹配:前面为指定字符串的位置。
(?<!字符串) 匹配:前面不为指定字符串的位置。
例如:
[a-z]+(?=ing) 匹配:以ing结尾的任意长度的字母串,不包括ing。
[a-z]+(?!ing) 匹配:不以ing为结尾的任意长度的字母串,它会匹配going、doing。
(?<=aaa)[0-9]{3} 匹配:前面是aaa的连续三位数字串。
(?<!aaa)[0-9]{3} 匹配:前面不是aaa的连续三位数字串。