云开发网站,域名可以自己注册吗,h5网站制作网站开发,卖二手手表的网站正则表达式是对字符串操作的一种逻辑公式#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合#xff0c;组成一个“规则字符串”#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。
作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…正则表达式是对字符串操作的一种逻辑公式就是用事先定义好的一些特定字符、及这些特定字符的组合组成一个“规则字符串”这个“规则字符串”用来表达对字符串的一种过滤逻辑。
作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正则表达式来提取字符串中符合要求的文本 替换 查找字符串中符合正则表达式的文本并用相应的字符串替换 分割 使用正则表达式对字符串进行分割。 案例
原始内容姓名lilei手机号13888888888邮箱lileiqq.com匹配正则姓名(\w)\n手机号(1[3-9]\d{9})\n邮箱([a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.])
无需对正则表达式心怀恐惧接下来将逐步为您阐释待阅读完毕您定会茅塞顿开。
字符类
字符类是匹配一个或多个的字符
在上面的例子中
姓名(\w)\n手机号(1[3-9]\d{9})\n邮箱([a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.])
标记的都是字符类下面是字符类的一些说明
1. . 匹配除 \n 之外的任何单个字符。要匹配 包括 \n在内的任何字符请使用 [.\n] 的模式。
2. \d 匹配一个数字字符。等价于 [0-9]。
3. \D 匹配一个非数字字符。等价于 [^0-9]。
4. \s 匹配任何空白字符包括空格、制表符、 换页符等等。等价于[ \f\n\r\t\v]。
5. \S 匹配任何非空白字符。等价于 [^\f\n\r\t\v]。
6. \w 匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]。
7. \W 匹配任何非单词字符。等价于 [^A-Za-z0-9_]。[]用法
[Pp]ython 匹配 Python 或 python
ub[ye] 匹配 ruby 或 rube
[aeiou] 匹配中括号内的任意一个字母
[0-9] 匹配任何数字。类似于 [0123456789]
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
[a-zA-Z0-9] 匹配任何字母及数字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了数字外的字符字符类内部
除了\之外其他特殊字符不再具备特殊意义都表示字面值。
^放在第一个位置表示否定
放在其他位置表示^本身
-放在中间表示范围放在字符类中的第一个字符则表示-本身。
量词
正则表达式量词是用来修饰字符类的数量
在上面的例子中
姓名(\w)\n手机号(1[3-9]\d{9})\n邮箱([a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.])
这些都是修饰前一个字符类的数量下面是量词的一些说明
1. ? 匹配前面的字符0次或1次
2. * 匹配前面的字符0次或多次
3. 匹配前面的字符1次或者多次
4. {m} 匹配前面表达式m次
5. {m,} 匹配前面表达式至少m次
6. {,n} 匹配前面的正则表达式最多n次
7. {m,n} 匹配前面的正则表达式至少m次最多n次注意点以上量词都是贪婪模式会尽可能多的匹配如果要改为非贪婪模式通过在量词后面跟随一个?来实现
分组与捕获
分组是用圆括号“()”括起来的正则表达式匹配出的内容就表示一个分组。
分组和捕获在正则表达式中有着密切的联系一般情况下分组即捕获都用小括号完成
(exp) 分组并捕获该分组匹配到的文本(?:exp) 分组但不捕获该分组匹配到的文本可以理解为数学里小括号的作用可以在后面使用量词或管道符
什么是捕获呢使用小括号指定一个子表达式后子表达式匹配的文本即匹配的内容可以在其他子表达式中重复使用。
简单来说就是对需要的内容作一个标记在搜索或替换时可以快捷引用
在上面的例子中
姓名(\w)\n手机号(1[3-9]\d{9})\n邮箱([a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.])
有三个分组分别是分组1分组2 分组3 从1开始
搜索时可以快捷提取分组的内容
替换时可以捕获引用分组内容进行替换
原始内容姓名lilei手机号13888888888邮箱lileiqq.com
匹配正则姓名(\w)\n手机号(1[3-9]\d{9})\n邮箱([a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.])
替换正则$1的邮箱是$3 电话是$2
替换后lilei的邮箱是lileiqq.com 电话是13888888888
字符功能(ab)将括号中正则表达式作为⼀个分组\num 或 $num引⽤分组序号匹配到的字符串在不同的编程语言中会不所不同(?Pname)分组起别名这个不常用可以忽略(?Pname)引⽤别名为name分组匹配到的字符串
捕获引用内容
. 通过组号捕获引用 每一个没有使用?:的小括号都会分配一个组合从1开始从左到右递增可以通过\i引用前面()内表达式捕获的内容\i 的内容是值与前面一致并不是表达式一致
通过组名捕获引用 可以通过在左括号后面跟随?Pname,尖括号中放入组名来为一个组起一个别名后面通过(?Pname)来引用 前面捕获的内容。如(?Pword\w)\s(?Pword)来匹配重复的单词。这里引用前面内容并不是正则表达式 (?Pword\w)\s(?Pword)如果引用的内容也需要分组则外面再加一个括号
注意点反向引用不能放在字符类[]中使用。
贪婪模式与非贪婪模式
贪婪模式总是尝试匹配尽可能多的字符。
非贪婪模式总是尝试匹配尽可能少的字符。
默认是贪婪模式 在量词后面加上就变成贪婪模式
在上面的案例中没有体现这里单独给个案例来说明
原始字符divtest1/divdivtest2/div
匹配正则贪婪模式div.*/div
结果匹配数量1匹配结果 divtest1/divdivtest2/div匹配正则非贪婪模式div.*?/div
结果匹配数量2匹配结果 divtest1/divdivtest2/div
断言
断言不会匹配任何文本只是对断言所在的文本施加某些约束
1. \b 匹配单词的边界放在字符类[]中则表示backspace 2. \B 匹配非单词边界受ASCII标记影响 3. \A 指定匹配必须出现在字符串的开头忽略Multiline选项。 4. \Z 指定匹配必须出现在字符串的结尾或字符串结尾的\ n之前忽略Multiline选项。 5. ^ 在起始处匹配如果有MULTILINE标志则在每个换行符后匹配 6. $ 在结尾处匹配如果有MULTILINE标志则在每个换行符前匹配 零宽断言7. (?exp) 也叫零宽度正预测先行断言它断言自身出现的位置的后面能匹配表达式exp。 8. (?exp) 也叫零宽度正回顾后发断言它断言自身出现的位置的前面能匹配表达式exp。负向零宽断言9. (?!e) 零宽度负预测先行断言(?!exp)断言此位置的后面不能匹配表达式exp。 10.(?!e) 零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp
这里以^和$来说明^和$分别代表的是起始位置和结束位置不会匹配任务字符
验证用户名格式
假设要求用户名只能由字母开头后面可以跟字母、数字或下划线且长度在 3 到 16 位之间。
正则表达式^[a-zA-Z][a-zA-Z0-9_]{2,15}$
解释
^ 表示匹配字符串的开头确保用户名是以字母开头。
[a-zA-Z] 匹配单个字母大写或小写。
[a-zA-Z0-9_]{2,15} 表示后面可以跟 2 到 15 个字母、数字或下划线。
$ 表示匹配字符串的结尾确保整个用户名符合规定的长度和字符组成。(?exp) 和(?exp)的案例
提取文件名中的编号文件命名有一定规则
假设文件命名格式为 “文件_编号.txt”如 “报告_001.txt”我们想提取编号部分。
可以使用正则表达式(?\_)[0-9]{3}(?\.txt)。
解释(?\_)是正向肯定回顾表示在当前位置之前但不包括当前位置必须有一个 “_” 字符。[0-9]{3}匹配 3 个数字(?\.txt)是正向肯定预查表示在当前位置之后但不包括当前位置必须有一个 “.txt”。
修饰符标记
标记也称为修饰符正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里标记位于表达式之外。
修饰符含义描述iignore - 不区分大小写将匹配设置为不区分大小写搜索时不区分大小写: A 和 a 没有区别。gglobal - 全局匹配查找所有的匹配项。mmulti line - 多行匹配使边界字符 ^ 和 $ 匹配每一行的开头和结尾记住是多行而不是整个字符串的开头和结尾。s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符加上 s 修饰符之后, . 中包含换行符 \n。
在vscode中使用