正则表达式学习(上)

2016-12-24  本文已影响259人  英勇青铜5

学习资料:

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

1. 开始,零碎知识点

. 点:英文句号,一个通配符,可以匹配任意字符,但一些特殊情况下不能匹配行起始符,例如,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 零碎


2.2 匹配空白字符

\s匹配空白符

可以匹配:

  1. 空格
  2. 制表符\t
  3. 换行符\n
  4. 回车符\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章学习的知识点

本人很菜,有错误请指出

共勉 :)

上一篇下一篇

猜你喜欢

热点阅读