一、定义:正则表达式,就是一种描述字符串结构模式的形式化表达方法,是强大、便捷、高效的文本处理工具。
正则表达式由两种字符构成, *,+,? 等一些 称为 元字符, 其他为 文字,
二、入门字符认识
1. 行起始和结束:
^ 代表一行的开始, $代表结束,匹配的是一个位置,而不是具体的文本。
例如:^cat 表示只寻找行首的cat, cat$ 只寻找位于行末的cat, 例如:以scat 结尾的行
实际理解 ^cat 匹配的是以c作为一行的第一个字符, a作为一行的第二个字符,以此类推。
举例:^$ 匹配行开头,然后就是行末尾,即匹配空行 ^cat$ 匹配只含cat 的行
2.匹配若干个字符 [ ···] ----字符组 ,找到一个目标字符
gr[ea]y : 先找到一个g, 跟着要给r, 然后是一个a 或者e最后是一个y, 用来查找字符串
[123456]: 匹配1到6中的任意一个数字。
“-”:连字符:表示一个范围, <H[1-6]> 与 <H[123456]> 等价,在字符组内部,连字符才是元 字 符,不能出现在开头,否则只是个普通字符
<H[-1-6],表示匹配 <H[-或123456中任意一个字符]
多重范围:[123456789abcdefABCDEF] 写作 [0-9a-fA-F] 或者 [ A-Fa-f0-9] 顺序无所谓,或者 结合字符 [0-9A-Z_!.?], "?" "."此时出现在字符组中,只是普通的字符
3.排除型字符组:[^···] ---- 匹配任何未列出的字符。
[^1-6]: 匹配除了1到6以外的任何字符。列出的是不希望匹配的字符,只能存在于 [ 之后的第一 个位置,存在于其中只是个普通字符,用来匹配,参考 2
q[^u] ; 匹配q后面的字母不是u。 raq 不能匹配到,排除q 处在行尾的情况,也就是说必须是要 有个字符的情况
"[^"]*" : 用来匹配引号内的字符串,*代表任意个
4. “.”匹配任意字:元字符 "."
03[-./]76 匹配到03-76 或者03.76 或者03/76 ,在字符组括号中不是元字符,作为普通字符
03.76 :. 号匹配任意字符, 范围更大,但是不精确
<.*> : 先匹配一个 < ,然后是任意多个任意字符,然后是>, 结果是匹配任意长度的在<> 中的任意字符串。
<a*> : 表示匹配任意个a " "没有a 也可匹配, aa aaaaaaa
<a.*>: 表示匹配任意以a开头的字符串
连字符“ -”, 在字符组括号中的开头时不作为元字符,在字符中间时才表示范围
5.多选结构 :可以匹配任意长度的文本或者表达式 "|"
boq|edc :匹配其中任意一个表达式 boq或者edc 例如 gr(a|e)y
放在字符组[ ]中是只是一个普通字符。gr[a|e]y gray, grey, gr|y
6.单词分界符:“\<”和“\>" 匹配单词分界的位置,类似单词版本的^ $
\<cat\> 匹配以cat开头和结束的单词
7.可选项元素 ?
(july | jul)--> (july?) : ?只匹配前面一个字符。匹配次数上限为1 ,下限为0
(4th | 4)--> 4(th)? : 用括号将th作为一个整体。
8 .重复出现 “+”, “*” 作用于符号前面紧临的字符,表示匹配多个改字符
“·*”:表示出现任意多个空格,没有也能匹配到 “·”是空格符 没有次数数上限和下限
“·+”:表示匹配任意多个空格,但是不能没有,至少有一个空格出现 次数下限为1, 上限没有
\>[A-Za-z]+\> : 匹配任意单词
8.1 规定出现的次数 { } 区间量词, {3,12} 规定能够容许的重现次数在3到12之间。
\>[A-Za-z]{3,12}\> : 匹配个数为3到12个之间的单词。 用区间代替 * + ?
9. 元字符序列 “\1”, "\2", "\3" 分别按从左到右的顺序匹配括号中的表达式内容
([a-z])([0-9])\1\2 \1 代表[a-z] 匹配的内容, \2 代表[ 0-9] 匹配的内容。
10. 转义字符 "\" 它作用的字符会失去特殊含义,成为普通字符。注:在字符组 [ ] 内部无效
\([ a-zA-Z]+\) :匹配 任意单词加上() 例如 (very) 括号前的\ 消除了开闭括号的特殊意义。