正则表达式 笔记

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

元字符 (匹配单个字符)
. 单行内任意字符(不匹配换行符)
\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. 最后一个参数表示字符串本身。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,134评论 0 9
  • python re模块重要函数变量:1. compile() 根据正则表达式字符串,创建模式的对象。2. sear...
    野狗子嗷嗷嗷阅读 297评论 0 1
  • 注:本篇文章只为方便查看,特此保留,如有冒犯,敬请谅解!!! 本文目标 30分钟内让你明白正则表达式是什么,并对它...
    阿杰Alex阅读 1,475评论 0 10
  • 转载自正则表达式30分钟入门教程 入门 学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实...
    夏天的风_song阅读 1,687评论 0 0
  • http://www.jb51.net/tools/zhengze.html 正则表达式30分钟入门教程 版本:v...
    nullleaf阅读 581评论 0 2