美文网首页
正则表达式 笔记

正则表达式 笔记

作者: 神刀 | 来源:发表于2017-03-03 19:28 被阅读24次

元字符
量词
字符类
分支条件
反义
分组
后向引用
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
其它

元字符 (匹配单个字符)
. 单行内任意字符(不匹配换行符)
\w 字母 or 数字 or 下划线 or 汉字
\s 空白符
\d 数字

\b 匹配位置—单词的开始或结束
^ 匹配位置-字符串的开始
$ 匹配位置-字符串的结束

量词

  •   任意数次
    
  •   至少一次或更多
    

? 最多一次或零次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

字符类 (匹配单个字符)
[ ] 表示匹配[]内字符中的一个

分支条件
从左至右,满足规则中任意一种都匹配,不同的规则用“|”分隔开
\d{5}-\d{4}|\d{5}

反义
\W 非(字母、数字、下划线、汉字)
\S 非空白符
\D 非数字
\B 非单词开头或结束的位置
[^x] 非x的任意字符
[^aeiou] 非(aeiou)的任意字符

例子: \S+ 匹配不包含空白符的字符串。
<a[^>]+> 匹配用尖括号括起来的以a开头的字符串。

分组
捕获分组:( ),分组会被自动捕获以便程序作进一步处理
默认组号:每个分组默认拥有一个组号,从左至右,第一个分组组号为1,第二个为2
指定组名:为(\w+)子表达式指定组名:(?<组名>\w+) or (?’组名’\w+))

匹配IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
注:IP地址中数字不大于255,可以包含前导 0

*常用分组语法:

捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

零宽断言
零宽度正预测先行断言 (?=exp) 此位置后面跟exp匹配 \b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分)
零宽度正回顾后发断言 (?<=exp) 此位置前面跟exp匹配 (?<=\bre)\w+\b 匹配以re开头的单词的后半部分(除了re以外的部分)
零宽度负预测先行断言 (?!exp) 此位置后面不跟exp匹配 \d{3}(?!\d) 匹配后面不能是数字的三位数字
零宽度负回顾后发断言 (?<!exp) 此位置前面不跟exp匹配 (?<![a-z])\d{7} 匹配前面不是小写字母的七位数字

后向引用
\1 \b(\w+)\b\s+\1\b \1 表示(\w+)分组捕获的内容
\k<组名> \b(?<组名>\w+)\b\s+\k<组名>\b

零断宽言 (用于指定一个位置)
查找在某些内容之前或之后的位置,这个位置将满足某些条件(即断言)
负向零断宽言 (反义)
注释

贪婪与懒惰
贪婪匹配
懒惰匹配
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

处理选项 (常用的正则表达式选项)

平衡组/递归匹配
(?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
(?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
(?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
匹配嵌套的<div>标签: <div[>]*>[<>](((?'Open'<div[^>]>)[<>]*)+((?'-Open'</div>)[<>])+)(?(Open)(?!))</div>.

其它

\a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头

\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式
(?<x>-<y>exp) 平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes) 同上,只是使用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no

replace(//,function(a,b,c,d){})
replace 第二个参数为函数
函数参数的规定:

  1. 第一个参数为每次匹配的全文本($&)。
  2. 中间参数为子表达式匹配字符串,个数不限.( $i (i:1-99))
  3. 倒数第二个参数为匹配文本字符串的匹配下标位置。
  4. 最后一个参数表示字符串本身。

相关文章

  • 学习笔记 正则表达式

    2021.01.19 北京海淀 -2℃ 小雪转晴 正则表达式学习笔记 说明:该笔记参考“菜鸟教程”网站正则表达式...

  • 笔记:正则表达式

    正则表达式基础部分笔记

  • js高级(四)

    JavaScript高级第04天笔记 1.正则表达式概述 1.1什么是正则表达式 正则表达式( Regular E...

  • 正则表达式学习笔记

    正则表达式学习笔记 一篇记录了学习正则表达式的笔记。 1. 转义字符 在 HTMl 中转义字符以 & 符号开头,分...

  • JavaScript正则表达式

    JavaScript 正则表达式 @(笔记)[正则表达式] 第一章 课程简介 1-1 JS正则表达式简介及应用 课...

  • Python学习随笔

    本笔记整理自中谷教育在线教育视频 学习笔记——正则表达式常用符号 这里学习过正则表达式后,简单做了一个爬虫程序,效...

  • 作业-第04周--课堂-Day15-正则表达式与三剑客知识应用实

    Day15 课堂笔记 1. 正则表达式 什么是正则表达式? 简单地说,正则表达式就是为了处理大量的字符串及文本而定...

  • 一个程序员的自我学习第一天

    《正则表达式必知必会》笔记 第一章:正则表达式入门 1:正则表达式是一些用来匹配和处理文本的字符串。正则...

  • Python ☞ day 11

    Python学习笔记之 正则表达式 re模块概述:Python自1.5以后增加了re的模块,提供了正则表达式模式...

  • Python3.5笔记——第11章 正则表达式

    Python3.5笔记 第11章 正则表达式 认识正则表达式 正则表达式是一个特殊字符序列,能够帮助用户检查一个字...

网友评论

      本文标题:正则表达式 笔记

      本文链接:https://www.haomeiwen.com/subject/envrgttx.html