正则表达式常用字符说明
元字符 | 释义 | 举例 |
---|---|---|
“^” | 匹配行或者字符串的起始位置 | “^\d” 表示必须以数字开头 |
“$” | 匹配行或字符串的结尾 | “\d$” 表示必须以数字结束 |
“\b” | 常用于匹配单词边界,不消耗任何字符只匹配一个位置 | 从"This is Regex"中匹配单独的单词 “is”, 正则就要写成 “\bis\b” |
“\d” | 匹配一个数字 | 如0737-5686123, 正则:“^0\d\d\d” |
\w | 匹配一个数字,字母,下划线 | 匹配"a2CD__Tz" 正则:"\w+" ,这里的"+"字符为一个量词指重复的次数 |
“\s” | 匹配一个空格 | 匹配"a b c" 正则:"\w\s\w\s\w" ,一个字符后跟一个空格,如果有多个空格,将“\s”写成“\s+” |
“.” | 匹配换行以外的任何一个字符 | 匹配字符"a23 4 5 B C D__TTz" 正则:".+" |
“[]” | 表示匹配范围,匹配包含括号内元素的字符 | 正则“[0-9a-zA-Z_]”,匹配一个数字、字母或者下划线 |
“A|B” | 可以匹配A或B | 如(P|p)ython可以匹配’Python’或者’python’ |
() | 表示的就是要提取的分组(Group) | 正则 “agent”([0-9]{1,8}).+?key":"(.*?)",有两个括号表示提取两组数据 |
反义字符 | 释义 |
---|---|
“\W” | 匹配任意不是字母,数字,下划线 的字符 |
“\S” | 匹配任意不是空白符的字符 |
“\D” | 匹配任意非数字的字符 |
“\B” | 匹配不是单词开头或结束的位置 |
“[^abc]” | 匹配除了abc以外的任意字符 |
量词 | 释义 | 举例 |
---|---|---|
“*”(贪婪) | 重复零次或更多 | 例如"aaaaaaaa" 匹配所有的a 正则: “a*” 会出到所有的字符"a",可以重复0次 |
“+”(懒惰) | 重复一次或更多次 | 例如"aaaaaaaa" 匹配所有的a 正则: “a+” 会取到字符中所有的a字符,至少重复1次 |
“?”(占有) | 重复零次或一次 | 例如"aaaaaaaa" 匹配a 正则 : “a?” 只会匹配一次,也就是结果只是单个字符a |
“{n}” | 重复n次 | 例如从"aaaaaaaa" 匹配a 并重复3次 正则: “a{3}” 结果就是取到3个a字符 “aaa” |
“{n,m}” | 重复n到m次 | 如正则 “a{3,4}” 将a重复匹配3次或者4次,所以匹配的字符可以是三个"aaa"也可以是四个"aaaa" |
“{n,}” | 重复n次或更多次 | {n,}匹配的次数将没有上限,但至少要重复n次 如 正则"a{3,}" a至少要重复3次 |
懒惰限定符 | 释义 | 举例 |
---|---|---|
“*?” | 重复任意次,但尽可能少重复 | 如 “acbacb” 正则 “a.*?b” 加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" |
“+?” | 重复1次或更多次,但尽可能少重复 | 与上面一样,只是至少要重复1次 |
“??” | 重复0次或1次,但尽可能少重复 | 如 “aaacb” 正则 “a.??b” 只会取到最后的三个字符"acb" |
“{n,m}?” | 重复n到m次,但尽可能少重复 | 如 “aaaaaaaa” 正则 “a{0,m}” 因为最少是0次所以取到结果为空 |
“{n,}?” | 重复n次以上,但尽可能少重复 | 如 “aaaaaaa” 正则 “a{1,}” 最少是1次所以取到结果为 “a” |
捕获分组符 | 释义 |
---|---|
“(exp)” | 匹配exp,并捕获文本到自动命名的组里 |
“(?exp)” | 匹配exp,并捕获文本到名称为name的组里 |
“(?:exp)” | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
零宽度断言 | 释义 | 举例 |
---|---|---|
“(?=exp)” | 匹配exp前面的位置(结束位置) | 如 “How are you doing” 正则"(?.+(?=ing))" 这里取ing前所有的字符,并将匹配到的值“How are you do”放到定义的捕获分组 "txt"中 |
“(?<=exp)” | 匹配exp后面的位置(起始位置) | 如 “How are you doing” 正则"(?(?<=How).+)" 这里取"How"之后所有的字符,并将匹配到的值“are you doing”放到定义的捕获分组 "txt"中 |
“(?!exp)” | 匹配后面跟的不是exp的位置(结束位置) | 如 “123abc” 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果 |
“(?<!exp)” | 匹配前面不是exp的位置(起始位置) | 如 “abc123 " 正则 “(?<![0-9])123” 匹配"123"前面是非数字的结果也可写成”(?!<\d)123" |