正则表达式学习(上)

学习资料:

哈哈,购买链接,以后做书托 :)

1. 开始,零碎知识点

  • 配合书练习的网站:Regex Pal

  • 匹配任意字符

. 点:英文句号,一个通配符,可以匹配任意字符,但一些特殊情况下不能匹配行起始符,例如,U+000A,也可以匹配%或者|


1.1 捕获分组和向后引用

捕获分组,向后引用
  1. (\d):匹配第一个数字7,并将其捕获
  2. \d:匹配第二个数字0,但没有对其捕获
  3. \1:对捕获的数字进行方向引用,数字7

将一个目标用()括起来,就创建捕获分组,\1则表示引用


1.2 使用量词

量词
  1. (:左圆括号,捕获分组的起始符
  2. \\: 反斜杠,字符组简写式的起始符,对之后的字符进行转义
  3. d:字符d,字符组的简写式的结束符,d,匹配[0-9]内任意数字
  4. {:左花括号,量词起始符
  5. 3:数字3,匹配目标字符个数的最小数量
  6. ,:逗号,分隔作用,这里分隔开不同的数量
  7. }:右花括号,量词结束符
  8. [:左方括号,字符组的起始符
  9. .:点号,匹配点号本身
  10. -:连接符,匹配本身
  11. ]:右方括号,字符组结束符
  12. ?:问号,表示量词,零个或者1个
  13. ):右圆括号,捕获分组的结束符
  14. +:加号,表示量词,一个或者多个

整个表达式含义:括号里的模式出现一次或者多次,括号里的规则是匹配三位数字或者四位数字,后面跟一个点号或者连字符

花括号包括的数字表示待查找的目标出现的次数。花括号是一种量词,本身用做元字符

问号,是另一种量词,在上面的表达式中表示连字符是可选的,也就是说连字符-可以出现一次,也可以一次都不出现

*星号,零个或者多个

注意:上面的表达式虽然匹配了电话字符串,但并不完全正确,因为只是匹配了3位或者4位数字,而不管是否符合电话号码的格式

改进:

(\d{3}[.-]?){2}\d{4}

改进后的含义:连续两个无括号3位数字后,每个3位数后面可以有连字符也可以没有,最后一个4位数字


1.3 括选文字符

无括号区号
有括号区号

上面一个表达式,可以匹配两种形式的电话号码字符串,开始的3位数区号,可以带括号,也可以不带括号

  1. 开头的脱字符^或者中间位置的^,表示匹配出现在一行 起始位置的目标字符
  2. (:,捕获分组起始符
  3. \(:,表示括号(字符本身,\作为转义字符,(本身有捕获分组的起始符的含义,需要转义字符
  4. d{3}:,匹配3位数字
  5. \):,表示)自身,与第3条同理
  6. ** |:**,表示选择,可以从多个选项中选择一个。本例中就是匹配一个带括号或者不带扩号的区号
  7. 脱字符^:,匹配行起始位置
  8. ** \d{3}:**,匹配3位数字
  9. [.-]?:,匹配一个可选的.点号或者-连字符
  10. ):,右圆括号,捕获分组结束符
  11. ?:,表示之前的(\(\d{3}\)|^\d{3}[.-]?)整个分组,都是一个可选项,可有可无
  12. \d{3}:,匹配3位数字
  13. [.-]?:,匹配一个可选的.点号或者-连字符
  14. \d{4}:,匹配4位数字
  15. $:,匹配行结束位置

以上正则表达式中的捕获分组并不是必需的。分组是必要的,但是捕获不需要。更好的方法是使用非捕获分组


2. 简单的模式匹配

2.1 零碎

  • \d:绝大多数情况下,都可以用来匹配阿拉伯数字
  • [0-9]:匹配数字,比\d更灵活,例如,[1-3],只匹配1,2,3这三个数字
  • \D:匹配非数字字符,包括空格、标点符号(引号、连字符、反斜杠、方括号)等字符;[^0-9],[^\d],同作用
  • \w:匹配字母,数字,下划线,在匹配英文字符组时,[_a-zA-Z0-9],同作用
  • \W:匹配空格、标点,其他非字母字符,非数字字符(包括中文),[^_a-zA-Z0-9],同作用,简写式就是[^\w]

2.2 匹配空白字符

\s匹配空白符
  • \s:匹配空白字符,[ \t\n\r] ,间括号内开始有空格,同作用

可以匹配:

  1. 空格
  2. 制表符\t
  3. 换行符\n
  4. 回车符\r
  • \S:匹配非空白字符,包含中文字符,[^ \t\n\r],同作用

2.3 匹配任意字符

去掉global全局模式,用来得到匹配文本中第一个符合匹配项

匹配 THE RIME

.点号在绝大多数情况下,都可以匹配除了行结束符外的任意字符

8个点,可以用.{8}来代替


特执性匹配ANCYENT

这个表达性具有很强的 特指性specificity,只要是A*****T这样形式的单词就符合条件

  1. \b:简写式匹配单词边界,不消耗任何的字符
  2. A,T:限定单词首尾字母
  3. .{5}:匹配任意5个字符
  4. \b:结束边界

匹配换行符前的字符

.*匹配零个或者多个字符,在取消global模式下,匹配换行符前的字符,也就是只匹配第一行的字符,.+[^\n]或者[^\n\r],同作用。在global模式下,.+[^\n]或者[^\n\r]则匹配全部的字符

若发现不正常匹配的,将文本时的格式整理整理,删除文本中间的复制时,带的多余无用的回车符


3. 边界

断言标记边界,但并不消耗字符,字符并不会返回到结果中。断言也被称为零度宽断言zero-width assertion。零度宽断言不匹配字符,而是匹配字符串中的位置。其中,^$也叫做锚位符anchor

本章节主要学习:

  • 行或者字符串的起始和结束位置
  • 单词的边界(两种)

3.1 行的起始和结束

脱字符^:匹配行或者字符的起始。根据上下文,^会匹配行或者字符串的起始位置,也可以匹配整个文档的起始位置

$匹配行或者字符串结束位置

multiline模式:多行,勾选后,整个目标文件被视为一个字符串

匹配How开头Country结束的字符串

^How.*Country\.$:匹配How开头的整行。\反斜杠的是做转义字符,对.点号进行转义,点号被解释为字面值,也就是点号本身,而不是匹配任意字符

如果不勾选mutiline模式,则不能匹配到图中的高亮部分,表达式无效


3.2 单词边界与非单词边界

匹配THE

\bTHE\b:在勾选global模式下,第一行两个THE都会匹配

就像^$一样,\b是个零度宽断言,表面上会匹配空格或者是行起始,而实际上它匹配的是个零宽度的不存在的东西。第2个THE的两边的空格并没有标亮,并不会被匹配到

读了2遍,也不是很明白


匹配单词首尾外位置的e

\B:非单词边界,匹配单词首尾之外位置,例如单词或者字符串中间位置出现的字母或数字

图中有个很典型的便是倒数第2行的eye,没有高亮


4. 最后

哈哈,单身狗,平安夜,学习知识

正则的知识点,好零碎,需要多看多练习。书一共9章,就打算一篇博客记录3章学习的知识点

本人很菜,有错误请指出

共勉 :)

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

推荐阅读更多精彩内容