正则表达式学习笔记
1、定位符
"^":匹配行或字符串的起始位置。例如匹配一个以 a 开头的字符串,"^a"
"$":匹配行或字符串的结尾。例如匹配一个以 b 结尾的字符串,"b$"
"\b":匹配一个单词边界,也就是字和空格间的位置。例如提取出 "we are joker" 中的 "are","\bare\b"
2、限定符
几个概念:
1)贪婪:会首先匹配整个字符串,会选定尽可能多的内容,如果失败,就回退一个字符,然后再次尝试。每次回退一个字符,直到找到要匹配的内容或者没有字符可以回退。
2)懒惰:从目标的开始位置匹配,每次检查一个字符,并寻找要匹配的内容,如此循环直到字符结尾处。
3)占有:会覆盖整个字符串,然后尝试匹配,但只尝试一次,不会回溯。
"*":重复 0 次或多次。可以不出现,也可以出现 1 次或多次。
例如:hahahhhaaaha 正则:ha*h,则表示 a 可以出现 0 次,1 次或多次。匹配结果:hah、hh、haaah
"+":重复 1 次或多次。至少出现 1 次。
例如:hahahhhaaaha 正则:ha+h,则表示 a 可以出现 1 次或多次。匹配结果:hah、haaah
"?":重复 0 次或 1次。最多 1 次。
例如:hahahhhaaaha 正则:ha+h,则表示 a 最多可以出现 1 次。匹配结果:hah、hh
"{n}":n 是一个非负整数,只能匹配前面的字符 n 次。
例如:hahahhhaaaha 正则:ha{3},则表示 a 出现 3 次。匹配结果:haaa
"{n,}":n 是一个非负整数,匹配前面的字符至少 n 次。
例如:hahahhhaaahaa 正则:ha{2,},则表示 a 至少出现 3 次。匹配结果:haaa、haa
"{n, m}":n、m 是一个非负整数,匹配前面的字符至少 n 次,最多 m 次。
例如:hahahhhaaahaa 正则:ha{2,4},则表示 a 至少出现 2 次,最多出现 4 次。匹配结果:haaa、haa
"*?":重复任意次,但尽可能少重复。
例如:acbab 正则: a.*?b,匹配结果:acb、ab,如果不加 ?,匹配结果 acbacb
"+?":重复 1 次或更多次,但尽可能少重复。
例如:acbab 正则: a.+?b,匹配结果:acb,如果不加 ?,匹配结果 acbacb
"??":重复 0 次或 1 次,但尽可能少重复。
例如:a.??b 可以匹配出 aaacb 中的 acb,但是不能匹配出 aaaccb 中的 accb
3、其他元字符
".":匹配除换行符 \n 外的其他任意单个字符。
"\d":匹配一个数字。也可以用 [0-9],如果要匹配多个数字可以用 "\d+" 。n 位的数字:"\d{n}"
"\w":匹配数字、字母或下划线。如 "a\w+" 可以匹配出 "abc123acb"
"\s":匹配单个空格,如果要匹配多个空格,可以用 "\s+"
"[abc]":字符集合。匹配所包含的任意一个字符。
"[^abc]":匹配字符集合外的任意字符。
"[a-z]":字符范围,可以匹配指定范围内的任意字符。
"[^a-z]":匹配不在指定范围内的任意字符。
4、一些常用的正则表达式
1)数字和英文字符组成的字符串:^[A-Za-Z0-9]+$
2) URL: [a-zA-Z]+://[^\s]*