regex正则表达式的基本语法学习
regex正则表达式的基本语法学习
留白regex正则表达式的基本语法学习
regex学习网站https://regexlearn.com/zh-cn/learn
一.基本匹配
[]
匹配括号内所有的字符
[^]
匹配除了括号内的所有字符
[a-z]
匹配在一个字符串中a到z之间的所有字符,字母换成数字也是可以的
.
匹配任意字符
二.重复
*
在一个字符后面加上*,表示该字符完全不去匹配或者可以多次匹配,等价于{0,}
+
在一个字符后面加上+,表示该字符可以出现一次或者多次,这跟*有些区别,等价于{1,}
?
在一个字符后面加上?,表示该字符可有可无,以此进行匹配,等价于{0,1}
{}
在一个字符后面加上这个大括号,括号里面填的是数字,表示该字符重复出现的确切次数,以此来匹配
{2,3}
括号的用法和上面一样,但是里面加了一个区间
意思是匹配该字符重复出现2到3次的字符串
如果不写右端点,如{2,}
表示选择那些至少重复出现2次该字符的字符串
组合运用
[0-9]{4}
这个意思是在单个数字0至9的范围内,连续匹配4次
[0-9]{2,}
这个意思是在单个数字0至9的范围内,连续匹配至少2次
三.分组
()
括号分组
\1
表示引用组,数字表示分组的顺序
|
竖线使一个表达式包含多个不同的分支,比如,(c|r)at|dog
表示匹配cat rat dog
\
转义字符,有时候我们希望显示符号本身,但是直接使用的话就是发挥它的正则表达作用,我们可以在要显示的符号前面加上\
^
匹配字符串的开始,仅查找行首的字符
$
匹配字符串的结束,仅查找行末的字符
\w
查找字母、数字、下划线
\W
查找除字母、数字、下划线以外的字符
\d
仅匹配数字
\D
匹配除数字之外的字符
\s
仅匹配空白符
\S
匹配空白符以外的字符
四.零宽断言
(?=PM)
Positive Lookahead Assertion正向先行断言,先找到PM
字符串,再取PM
前面的字符
(?!)
Negative Lookahead Assertion负向先行断言,匹配除了PM前面的字符以外的字符,同上功能相反
(?<=PM)
Positive Lookbehind Assertion正向后行断言,先找到
(?<!)
Negative Lookbehind Assertion负向后行断言
这部分内容的语法有点难以理解和记忆,在这里可以去分析它们的结构
()
是一个分组,与其它部分区分开来
?
定义关键字,告诉Regex引擎这是一个断言
<
意味着它是后行的,当作一个形容词修饰词使用,没有它时默认先行
=
意味着它是一个正向语句
!
意味着它是一个负向语句
五.标志(修饰符)
/示例语句/
双斜杆里面放Regex语句,在第二个斜杠后面添加标志
g
Global全局匹配,匹配所有符合条件的项,而不仅仅找到一个
m
Multiline多行模式,不只匹配一行,而是每行都去检查
i
Insensitive对大小写不再敏感,不区分大小写
六.匹配长度控制
.*r
贪婪匹配,先找到r,再看看r前面的字符,不仅匹配所有字符,还要尽可能的去多次匹配,产生的效果就是匹配无限长的字符
.*?r
懒惰匹配,先找到r,再看看r前面的字符,然后仅匹配一次且只匹配找的第一个
七.基础通关!
进阶 用于SEO(Search Engine Optimization,搜索引擎优化)的一部分Regex语法
.*
任何
.*buy.*
找到所有包含buy的字符串内容
^http[^s].*
意思是找到以http
为开头的无限长字符串
^.{35}$
用^
和$
限制开头和结尾,在该区域内只能有35个字符,以此匹配
其中{}
也可以写成{1,35}
、{35,}
等合法的形式进一步去限制字符长度
/*.pdf$
中的/
用于在文件路径中分割目录和文件名,*
表示该文件名中可以有任意数量的字符,.pdf
匹配pdf格式的文件,$
匹配字符串的结尾
思考
在学长的督促下学习了Regex的基本知识,虽然还不知道这些以后会有多大用处,但通过在这块内容的学习还是解决了以前的一些困惑
以前经常见到奇怪的符号组合进而产生特殊的效果,在使用一些搜索引擎和软件Everything的搜索时经常看到正则表达式搜索模式,曾经还不清楚这是什么东西什么意思
现在至少理解了它是一个什么样子的工具,减少了知识盲区