正则表达式
正则表达式
元字符
\b
代表着单词的开头或结尾,也就是单词的分界处。
"This is Regex" "\bis\b" //只想匹配“is”这个单词,This中的“is”不匹配
.
匹配除了换行符以外的任何字符
*
重复零次或更多
.*//任意数量的不包含换行的字符
\d
匹配一个数字
\d\d //匹配2个数字 \d{8} //匹配8个数字
\w
匹配字母,数字,下划线或汉字
\s
匹配空格
[abc]
匹配包含括号内元素的字符
[a-z]//匹配a至z的所以字母
^
会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。
$
会匹配行或字符串的结尾
^\d{5,12}$ //QQ号必须为5位到12位数字
元字符反义
"\W" 匹配任意不是字母,数字,下划线 的字符 "\S" 匹配任意不是空白符的字符 "\D" 匹配任意非数字的字符 "\B" 匹配不是单词开头或结束的位置 "[^abc]" 匹配除了abc以外的任意字符
字符转义
要查找元字符相关的要加"\"
\. //匹配. \* //匹配*
量词
"*"(贪婪) 重复零次或更多 "+"(懒惰) 重复一次或更多次 "?"(占有) 重复零次或一次 "{n}" 重复n次 "{n,m}" 重复n到m次 "{n,}" 重复n次或更多次
分枝条件
|
相当于或的意思
分组
()
就是这个条件使用多少次
(\d{1,3}\.){3}\d{1,3} //匹配IP地址
捕获分组
其实就是一个括号内的内容
后向引用
如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式
(\d)\d\1//这里的"\1"就是对"(\d)"的后向引用
"zery zery" 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符也是 与(\w+)一样的"zery",为了让组名更有意义,组名是可以自定义名字的 "\b(?<name>\w+)\b\s\k<name>\b" 用"?<name>"就可以自定义组名了而要后向引用组时要记得写成 "\k<name>";自定义组名后,捕获组中匹配到的值就会保存在定义的组名里
"(exp)" 匹配exp,并捕获文本到自动命名的组里 "(?<name>exp)" 匹配exp,并捕获文本到名称为name的组里 "(?:exp)" 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言
"(?=exp)" 匹配exp前面的位置 如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do"; "(?<=exp)" 匹配exp后面的位置 如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing"; "(?!exp)" 匹配后面跟的不是exp的位置 如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果 "(?<!exp)" 匹配前面不是exp的位置 如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"
相关推荐
wangzhaotongalex 2020-10-20
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
taomengxing 2020-09-07
MaggieRose 2020-08-19
jyj00 2020-08-15
MaggieRose 2020-07-04
modaiairen 2020-06-28
ziggurat 2020-06-28
JnX 2020-06-27
jyj00 2020-06-26
山水沐光 2020-06-25
shqhope 2020-06-23
eroshn 2020-06-21
码墨 2020-06-16
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13