[regex]正则表达式
1. 参考及测试文本
- 正则表达式在线测试工具,选python语言,python字符串前直接加
r
防止正则表达式被转义 - github上找的学习资料
- 测试字符串(随便敲的)
The fat cat sat on the mat
The car parked in the garage
A garage is a good place to park a car
good place.
The fat cat sat on the concatenation
The fat cat sat on the mat.
The number was 9.99997 but we round it off to 10.0.
The fat cat sat on the mat.
Hello____hi.
abcffdAshsabc
cbtcbbt.
cbjssjstsadsff
ct
2. 常用运算符阐释
.
:点运算符,可以匹配任意单个字符,但不包括换行符
.ar
可以匹配任意一个后面跟着ar的字符
[]
:字符集,匹配的内容由中括号中的内容决定
[Tt]he
匹配The和the
t[.]
方括号中的.就是英文半角的句号,没有特殊含义;但是如果不用[],.就是一个特殊字符,需要靠/转义。
[a-z0-9_-]
匹配小写字母a-z,数字0-9,下划线_
[^]
:否定字符集
[^c]ar
匹配一个后面是ar的字符,但是这个字符是除了c以外的。
[^a-z0-9_-]
匹配除小写字母a-z,数字0-9,下划线_之外的任意字符,包括换行符
*
:重复次数,判断*
前面的字符或者字符集是否在范围内,不在范围内匹配次数也会加1次。匹配0次或者更多次*
前面的字符
[a-z]*
匹配所有前面是小写字母的字符串
\s*cat\s*
匹配空格开头空格结尾中间是cat的字符串,或者中间是cat的字符串
+
:+
前面的字符串至少出现一次会被匹配
c.t
c和t中间跟除了换行符以为的任意字符
c.+t
c和t之间跟一个或者多个字符,至少一个字符,0个不行。
?
:推断匹配字符在或者不在
[T]?he
可以匹配The和he
{}
:用来限定出现次数,左边右边靠,
隔开
[0-9]{2,3}
匹配最少2位最多3位0-9之间的数字
-(...)
:集合
(c|g|p)ar
可以匹配car或gar或par
|
:或运算符
(T|t)he|car
匹配The或the或car
\
:转义字符,把{}[]/\+*.$^|?
转换成普通字符
(f|c|m)at\.?
匹配fat或者cat或者mat加上句号.或者不加.
^
$
:^
指定字符串开头,和[^]
不一样,$
指定字符串结尾
^(T|t)he
匹配和The或者the开头的字符串
-
\w
:匹配所有字母 -
\W
:匹配所有非字母 -
\d
:匹配所有数字 -
\D
:匹配所有非数字 -
\s
:匹配所有空格 -
\S
:匹配所有非空格 -
\n
:匹配换行符 -
\r
:匹配回车符 -
\t
:匹配制表符 -
?=
:表示第一部分表达式后面必须跟?=
后面的东西
(T|t)he(?=\sfat)
表示匹配的The或者the后面必须跟空格 fat
?!
:表示第一部分表达式后面必须不跟?!
后面的东西
(T|t)he(?!\sfat)
表示匹配的The或者the后面必须不跟空格 fat
?<=
:相比于?=
,这个后面必须跟一个其他的格式
(?<=(T|t)he\s)(fat|mat)
匹配fat或者mat,但是前面必须跟The 空格 或者 the 空格
?<!
:相比于?!
,这个后面必须跟一个其他的格式
(?<!(T|t)he\s)(cat)
匹配cat,但是前面必须不跟The 空格 或者 the 空格
i
:忽略大小写。
/The/gi
g表示全局搜索,全局搜索The,并且忽略大小写,所以The和the都可以。
- 贪婪匹配和惰性匹配
/(.*at)/
正则表达式默认会去搜索 任意字符+at的字符串,并且匹配尽可能长的子串(字符串匹配直到遇到空格符或者换行符等),这就是贪婪匹配模式
/(.*?at)/
转换成惰性匹配模式,字符串到at就结束了。