zoukankan      html  css  js  c++  java
  • 《正则表达式必知必会》读书笔记

    匹配单个字符串

    • “ . ”来匹配任意单个字符
    • 需要找“ . ”本身使用“.”,""为特殊字符序列的开头

    匹配一组字符串

    • 匹配多个字符中的某一个

      • 使用“ [ ”“ ] ” 来定义一个字符集合

    • 利用字符集和区间

      • [0-9] 和 [A-Z] 和 [A-Za-z0-9]

    • 取非匹配

      • [^0-9a-b] 注意:" ^ " 是作用于整个区间,而非紧跟后面的

    使用元字符

    • 匹配空白字符

      • B —— 回退并删除一个字符(BackSpace键)
      • f —— 换页符
      • —— 换行符
      • —— 回车符
      • —— tab符
      • v —— 垂直tab符

    • 匹配数字

      •  —— 任意一个数字字符(等价于[0-9])
      • D —— 任意一个非数字字符(等价于[^0-9])

    • 匹配字母和数字(与非字母和数字)

      • w —— 任意一个字母(大小写都可),数字,下划线(等价于[a-zA-Z0-9_])
      • W —— 任意一个非字母,数字或非下划线的字符(等价于[^a-zA-Z0-9_])

    • 匹配空白字符(于非空白字符)

      • s —— 任意一个空白字符(等价于[f v])
      • S —— 任意一个非空白字符(等价于[^f v])

    • 匹配十六进制货八进制数值

    • 使用POSIX字符类 (javascript不支持)

    重复匹配

    • 匹配一个或多个字符

      • 使用 “ + ” 表示同一个字符(或字符集合)的多次重复, 至少需要匹配一个字符。
      • 字符集合中的元字符会被解析为普通字符,例如:[w.] 等价于 [w.]

    • 匹配零个或多个字符

      • 使用 “ * ” 表示同一个或多个字符(或字符集合)的多次重复。
      • 可以把 “ * ” 理解为 “在我前面的字符或字符集合是可选的”
      • “ + ”“ * ” 区别是前者至少需要匹配一个字符,后者可以不出现

    • 匹配零个或多个字符

      • 使用 “ ? ” 表示同一个字符(或字符集合)的零次或一次出现。

    匹配的重复次数

    • 为重复匹配的次数设定一个精确的值

      • 使用“ { ”“ } ” 来为前面一个字符(或字符集合)重复匹配次数设定一个精确的值。
      • 例子: [3] [1] [2]
      • 正则: ([d]){3}

    • 为重复匹配次数设定一个区间

      • 使用“ { ”“ } ” 来为前面一个字符(或字符集合)重复匹配次数设定一个区间的值。
      • 例子:
        • [3] [1] [2]
        • myArray[0]
      • 正则: ([d]){1,3}

    • 匹配 “至少重复多少次”

      • 例子:
        • [3] [1] [2]
        • myArray[0]
      • 正则: ([d]){1,}

    • 匹配 贪婪型元字符 和 懒惰型元字符
      • 贪婪型元字符 : 懒惰型元字符

        • : *?
        • : +?
      • {n,} : {n,}?

      • 例子:需要取得元素标签

        • BK and cK
      • 正则: <[Bb]>.*?

    位置匹配

    • 单词边界
      • 使用 **  ** 来匹配一个单词的开始或结尾
        **  ** 匹配这样的一个能构成单词的字符(字母,数字和下划线),等同于 ** w **
      • 例子:
        The cat acattered his food all over the room
      • 正则:cat
      • 输出:cat

      • 使用 ** B ** 表示不匹配一个单词的边界
        等同于 ** W **

    • 字符串边界
      • 使用 ** ^ ** 定义字符串的开头
      • 例子:
        this is bad
      • 正则: ^s*<?xml.*?> //对合法的空白自负做出妥善处理

      • 使用 ** (?m) ** 开启分行模式
        分行模式吧分隔符当做一个字符串分隔符来对待
        有许多正则表达不支持分行模式
      • 例子:
        //a
        //b
      • 正则: (?m)^s*//.*$

    子表达时

    • 使用 ** “( ” ** 和 ** “ ) ” ** 来表示子表达式
      • 例子:
        1983-03-13
      • 正则:(19|20)d{2}

    • 使用子表达式的嵌套,应该按照先內后外的原则进行

    回朔引用:前后一致匹配

    • 使用 ** 数字 ** 表示表达式的后半部分引用在前半部分中定义的子表达式,可以想象变成变量
      • 例子:
        of of and and
      • 正则:[ ]+(w+)+[ ]+1
    • 替换模式 P85 需要继续了解

    前后查找

    • 正向前查找 ** ?= **
    • 正向后查找 ** ?<= **
    • 负向前查找 ** ?! **
    • 负向后查找 ** ?<! **

    javascript的正则 附录

    • exec:匹配 RegEx
    • match:匹配 字符串
    • replace:替换 字符串
    • split:分拆
    • search:测试指定的字符串是否匹配字符串的方法
    • test: 测试指定的字符串是否匹配RegEx的方法

    javascript 命令行注意点

    • g:激活全局搜索功能
    • i:匹配不分字母大小写
    • m:多行字符串
    • s:单行字符串
    • x:忽略空表字符
    • $':将返回被匹配字符串前面的所有东西
    • $`:将返回被匹配字符串后面你的所有东西
    • $&:将返回被匹配到的所有东西
  • 相关阅读:
    外设简述
    代C语言上机实践
    css动画效果
    css滑动门原理
    css整理
    html
    html单词
    倒计时.js
    随机方块
    求字符串出现次数和最大值
  • 原文地址:https://www.cnblogs.com/maiyan/p/3582984.html
Copyright © 2011-2022 走看看