正则表达式
2024-09-09 10:41:53 2 举报
AI智能生成
正则框架
作者其他创作
大纲/内容
特殊单字符
. 任意字符(除换行外)
\d 任意数字 \D非任意数字
\w 任意数字字母下划线 \W非任意数字字母下 划线
\s 任意空白符
空白符
\r 回车
\n 换行
\f 分页
\t水平制表
\v 垂直制表
分组
功能
子主题 1
()中的内容会被看做为一个整体
在后续的匹配中可是只用之前的()的内容作为一个整体,再次被使用 例如 /(\w+)(\s\1)+/
分组编号
第几个括号就是第一个分组
非捕获组 使用(?:)提升性能
捕获组的编码从左括号开始计数
捕获组命名(?P<分组名>正则)。
例子
the little cat cat is in the hat hat hat, we like it. (去除重复单词)
'the little cat cat is in the hat hat hat, we like it.'.replace(/(\w+)(\s\1)+/g,'$1')
模式
贪婪模式(表示 默认是贪婪模式)
吐出=回溯
一开始匹配会找最大的量词进行匹配
不成功:则吐出一个字符,继续匹配后面第一个字符,否则继续走不成功的程序
成功:继续下一个条件
非贪婪模式(懒惰模式 ?)
吐出=回溯
一开始匹配会找最小的量词进行匹配
不成功:则增加一个字符,继续匹配后面第一个字符,否则继续走不成功的程序
成功:继续匹配下一个条件
修饰符:我们可以在量词后面加上英文的问号 (*?)
例如 *?, +?, ??, {n,m}?
let sentence = "This is a test";
let wordRegex = /\b\w+?\b/g;
let words = sentence.match(wordRegex);
console.log(words); // 输出: ["This", "is", "a", "test"]
独占模式 +(js 中不支持独占)
不会进行回溯
一开始匹配会找最大的量词进行匹配
不会进行回溯子主题 1
它使用+或*后面紧跟+或*(如++或*+)
独占模式(Possessive Quantifiers)在正则表达式中通常使用 *+, ++, {n,}+, 或 {n,m}+ 的形式。这种模式介于贪婪和非贪婪之间,一旦开始匹配,它就不会回溯以尝试更短的匹配序列。这通常在处理性能敏感的应用程序中很有用,因为独占模式可以避免不必要的回溯,从而提高匹配速度。
量词
* 0个或者多个
? 一个或者没有 就其实本身的是有没有的意思
+ 至少一个
{1,} 至少匹配一个
{1} 匹配1次
{1,12}匹配1到12个的数量
匹配模式mode(js是在放在正则表达式的外面/正则/ims)
点号通配模式
Dot All
作用:英文的点可修修饰任何字符
修饰符: .
[\s\S]=[\w\W]=[\w\W] 与 (?s)(js不支持这个格式的书写) 相等
单行匹配模式
多行模式
Multiline
作用:使 ^ 和 $默认匹配整个字符串的开头或者结尾,多行模式可以使得他匹配每行的开头或者结尾
通常情况下,^匹配整个字符串的开头,$ 匹配整个字符串的结尾。多行匹配模式改变的就是 ^ 和 $ 的匹配行为。
^匹配行的开始,多行模式时,可以匹配任意行开头
$匹配行的结尾,多行模式时,可以匹配任意行结尾
注释模式
Comment
只用:正则可能会很复杂,注释使用
(\w+)(?#word) \1(?#word repeat again)
不区分大小写模式
Case-Insensitive
作用:正则不区分英文字母的大小写
修饰符 :(?i) js 中 /正则表达式/i
Cat cat CAT匹配出cat字符,不论大小写
(?i)cat js中 /cat/gi
修饰符如果在括号内,作用范围是这个括号内的正则,而不是整个正则;((?i)c)at 仅仅只对c的大小写不过敏,at还是匹配小写的
断言
\b 单词的边界
行的开始于结束
^匹配行的开始,多行模式可以匹配任意行的开头
$匹配行的结束,多行模式可以匹配任意行的末尾
\A 仅匹配整个字符串的开始,不支持多行模式
\Z 仅匹配整个字符串的结束。不支持多行模式
环视
(?<=Y)X 匹配X前面是Y
(?<!Y)X 匹配X前面不是Y
X(?=Y) 匹配X右边紧接着是Y
X(?!Y) 匹配X的右边不是Y
正则转义
转义字符
含义:对他后续的几个字符进行替代并解释
功能
编码无法使用字母直接表示的特殊数据
表示无法直接键盘录入的字符(如回车符)
字符串转义和正则转义
字符串转义:输入字符串到字符串文本的过程
正则转义:正则文字到正则表达式的过程
匹配反斜杠本身需要一个\
简化方式:使用原生字符串
元符号的转义
量词*或+或?或-或¥或|等,直接在前面加反斜杠
括号[]{}只需要转义开括号\[]\{},但是()需要两个兜都转义
使用编程语言中的函数消除元字符特殊含义
Python re.escape(test)
Go regexp.QuteMeta(text)
java Pattern.quote(texy)
PHP preg_quoye(text)
字符组的转义
1,脱字符在中括号,切在第一个位置
2,中划线在中括号中,且不在收尾位置
3,有括号中在中括号中,且不在首位
4,其它单个长度的元字符一半不需要转义
范围
[ 0-9a-zA-Z] 范围中的任意数
[^0-9 ] 非0-9范围的任意数
| 或者 a|b|c 其中的一个或者多个
[a,c,d] 多选一,或者选多
0 条评论
下一页