正则表达式

1、什么是正则表达式?

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

优点:速度快、效率高、准确性高

缺点: 难度有一点大

2、语法

正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式的模式可以包括以下内容:

  • 字面值字符:例如字母、数字、空格等,可以直接匹配它们自身。

  • 特殊字符:例如点号 .、星号 *、加号 +、问号 ? 等,它们具有特殊的含义和功能。

  • 字符类:用方括号 [ ] 包围的字符集合,用于匹配方括号内的任意一个字符。

  • 元字符:例如 \d\w\s 等,用于匹配特定类型的字符,如数字、字母、空白字符等。

  • 量词:例如 {n}{n,}{n,m} 等,用于指定匹配的次数或范围。

  • 边界符号:例如 ^$\b\B 等,用于匹配字符串的开头、结尾或单词边界位置。

3、修饰符

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外,格式如下:

/pattern/flags

下表列出了正则表达式常用的修饰符:

修饰符含义描述
iignore - 不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
gglobal - 全局匹配查找所有的匹配项。
mmulti line - 多行匹配使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

4、元字符

匹配字符:

1    .     匹配除换行符以外的任意字符    
2    \w   匹配字母或数字或下划线    
3    \s    匹配任意的空白符    
4    \d    匹配数字    
5    \n    匹配一个换行符    
6    \t     匹配一个制表符    
7    ^     匹配字符串的开始
8    $     匹配字符串的结尾    

1    \W    匹配非字母或数字或下划线    
2    \D     匹配非数字    
3    \S     匹配非空白符    
4    a l b  匹配字符a或字符b    
5    ( )     匹配括号内的表达式,也表示一个组    
6    [...]    匹配字符组中的字符    
7    [^...]   匹配除了字符组中字符的所有字符    

量词:控制前面的元字符出现的次数 :

1   *         重复零次或多次
2   +        重复一次或更多次    
3   ?       重复零次或一次    
4   {n}      重复n次    
5   {n,}     重复n次或更多次    
6   {n,m}  重复n到m次    

5、运算符优先级

以下是一些常见正则表达式运算符按照优先级从高到低的顺序:

  • 转义符号: \ 是用于转义其他特殊字符的转义符号。它具有最高的优先级。

    示例:\d\. 等,其中 \d 匹配数字,\. 匹配点号。

  • 括号: 圆括号 () 用于创建子表达式,具有高于其他运算符的优先级。

    示例:(abc)+ 匹配 "abc" 一次或多次。

  • 量词: 量词指定前面的元素可以重复的次数。

    示例:a* 匹配零个或多个 "a"。

  • 字符类: 字符类使用方括号 [] 表示,用于匹配括号内的任意字符。

    示例:[aeiou] 匹配任何一个元音字母。

  • 断言: 断言是用于检查字符串中特定位置的条件的元素。

    示例:^ 表示行的开头,$ 表示行的结尾。

  • 连接: 连接在没有其他运算符的情况下表示字符之间的简单连接。

    示例:abc 匹配 "abc"。

  • 管道: 管道符号 | 表示"或"关系,用于在多个模式之间选择一个。

    示例:cat|dog 匹配 "cat" 或 "dog"。

6、匹配规则

模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如:

^once

这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was a man from NewYork" 不匹配。正如如 ^ 符号表示开头一样,$ 符号用来匹配那些以给定模式结尾的字符串。

bucket$

这个模式与 "Who kept all of this cash in a bucket" 匹配,与 "buckets" 不匹配。字符 ^ 和 $ 同时使用时,表示精确匹配(字符串与模式一样)。例如:

^bucket$

只匹配字符串 "bucket"。如果一个模式不包括 ^ 和 $,那么它与任何包含该模式的字符串匹配。例如模式:

once

与字符串

There once was a man from NewYork
Who kept all of his cash in a bucket.

是匹配的。

在该模式中的字母 (o-n-c-e) 是字面的字符,也就是说,他们表示该字母本身,数字也是一样的。其他一些稍微复杂的字符,如标点符号和白字符(空格、制表符等),要用到转义序列。所有的转义序列都用反斜杠 \ 打头。制表符的转义序列是 \t。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:

^\t 

类似的,用 \n 表示"新行",\r 表示回车。其他的特殊符号,可以用在前面加上反斜杠,如反斜杠本身用 \\ 表示,句号 . 用 \. 表示,以此类推。

7、例子

正则表达式描述
/\b([a-z]+) \1\b/gi一个单词连续出现的位置。
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/匹配一个 URL 解析为协议、域、端口及相对路径。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/定位章节的位置。
/[-a-z]/a 至 z 共 26个 字母再加一个 - 号。
/ter\b/可匹配 chapter,而不能匹配 terminal。
/\Bapt/可匹配 chapter,而不能匹配 aptitude。
/Windows(?=95 |98 |NT )/可匹配 Windows95 或 Windows98 或 WindowsNT,当找到一个匹配后,从 Windows 后面开始进行下一次的检索匹配。
/^\s*$/匹配空行。
/\d{2}-\d{5}/验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*?>匹配 HTML 标记。
正则表达式描述
hello匹配 {hello}
gray|grey匹配 {gray, grey}
gr(a|e)y匹配 {gray, grey}
gr[ae]y匹配 {gray, grey}
b[aeiou]bble匹配 {babble, bebble, bibble, bobble, bubble}
[b-chm-pP]at|ot匹配 {bat, cat, hat, mat, nat, oat, pat, Pat, ot}
colou?r匹配 {color, colour}
rege(x(es)?|xps?)匹配 {regex, regexes, regexp, regexps}
go*gle匹配 {ggle, gogle, google, gooogle, goooogle, ...}
go+gle匹配 {gogle, google, gooogle, goooogle, ...}
g(oog)+le匹配 {google, googoogle, googoogoogle, googoogoogoogle, ...}
z{3}匹配 {zzz}
z{3,6}匹配 {zzz, zzzz, zzzzz, zzzzzz}
z{3,}匹配 {zzz, zzzz, zzzzz, ...}
[Bb]rainf\*\*k匹配 {Brainf**k, brainf**k}
\d匹配 {0,1,2,3,4,5,6,7,8,9}
1\d{10}匹配 11 个数字,以 1 开头
[2-9]|[12]\d|3[0-6]匹配 2 到 36 范围内的整数
Hello\nworld匹配 Hello 后跟换行符,后跟 world
\d+(\.\d\d)?包含一个正整数或包含两位小数位的浮点数。
[^*@#]排除 *、@ 、# 三个特色符号
//[^\r\n]*[\r\n]匹配 // 开头的注释
^dog匹配以 "dog" 开始
dog$匹配以 "dog" 结尾
^dog$is exactly "dog"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值