正则表达式学习

2022-04-28  本文已影响0人  叶落清秋

1. 基础语法

ps: {n}{n,}{m,n}?*+只匹配前一个字符

abc+ : 匹配 abc、abcc、 abccc等

a[bc]+: 匹配ab、ac、abb、abc、acb等

a(bc)+: 匹配abc、abcbc、abcbcbc等

a|b|c+: 注意这个+与c绑定,实际匹配的是a、b、c、cc、ccc、cccc等

^abc : 匹配以abc开头的字符串

.: 对应除换行符以外的所有字符,但只对应一个字符,.+ 匹配除换行符以外的所有字符

2. 括号的用法

() 是组,可以是表达式

--() 匹配的是组,可以是多个字符,匹配保存结果,即产生数组保存对应的对个值,可以使用$1获取第一个匹配值
(abc| bac| cba) 匹配abc或bac或cba,顺序固定
-- (?)以?开头的为非获取匹配,只匹配不保存结果,即不产生数组
tr(?=y|ies|ying|ied) 该方式等同于try|tries|trying|tried
a(?=bc) 匹配以abc顺序出现的a                     (?<=bc)a  前置匹配,匹配以bca顺序出现的a
a(?!bc) 匹配不以abc顺序出现的a   如:ac中的a       (?<!bc)a  前置匹配,匹配不以bca顺序出现的a   如:ca中的a

[] 是定义匹配的字符范围

 -- [] 匹配单个字符
[1-9] 匹配1到9的数字
[135] 匹配1、3、5中的数字
[?*+(a)]  注意,[]中特殊字符不需要转义即可使用,这里匹配?、*、+、(、a、)中的任一字符,并不是表达式
[]中有用的符号为:
1. ^ 取反 ^a即除a以外的字符
2. - 区间 a-z即 a到z的字母
3. \ 匹配特殊字符: 换行(\n) 中文(\u4e00-\u9fa5)等

{} 用来匹配的长度

{n} - 匹配 n次。
{n,} - 匹配 n次以上
{m,n} - 最少 m次,最多n次匹配

3. 优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似

运算符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

4.修饰符

通常使用g/[1-9]/g

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

5. 非贪婪

*和 +限定符都是贪婪的,它们会尽可能多的匹配文字。但是加上?将变成非贪婪表达式、最小匹配

<span> hello </span>
<.*>    匹配<span> hello </span>
<.*?>   匹配<span>
上一篇下一篇

猜你喜欢

热点阅读