• 正则表达式必知必会-笔记


    一、基本元字符

    • . (匹配任意单个字符)
    • | (逻辑或操作符)
    • [] (匹配字符集合中的一个字符)
    • [^] (对字符集合求非) [^0-9] //表示非数字字符
    • - (定义一个区间,必须放在[]中) [a-z] //表示字母a-z
    • (对下一个字符转义)

    二、元字符

    • d (匹配任意数字字符)
    • D (d的反义)
    • (换行符)
    • (回车符)
    • s (匹配一个空白字符)
    • S (s的反义)
    • (制表符)
    • w (匹配任意字母数字或下划线)
    • W (w的反义)

    三、数量元字符

    • * (匹配前一个字符或子表达式的>=0次重复)
    • + (匹配前一个字符或子表达式的>=1次重复)
    • (匹配前一个字符或子表达式的0次或1次重复)
    • {n} (匹配前一个字符或子表达式的n次重复)
    • {m,n}(匹配前一个字符或子表达式的m至n次重复)
    • {n,} (匹配前一个字符或子表达式的>=n次重复)
    • *? (*的懒惰型版本)
    • +? (+的懒惰型版本)
    • {n,}?({n,}的懒惰型版本)

    匹配一个电子邮箱

    w+[w.]*@[w.]+.w+
    //可以匹配ben@forta.com和ben.forta@forta.com
    

    防止过度匹配(懒惰型版本)

    <b>one</b> and <b>two</b>
    //正则表达式 <b>.*</b>
    //结果一行全匹配了
    //正则表达式 <b>.*?</b>
    //结果 <b>one</b>和<a>two</b>分开匹配到
    

    四、位置元字符

    • ^ (匹配字符串的开头)
    • $ (匹配字符串的结尾)
    •  (匹配单词边界)(位于与w相匹配的字符和与W相匹配的字符之间)

    例如

    the cat scattered his food all over the room
    //正则表达式 cat
    //结果只匹配cat,不匹配scattered里面的cat
    

    五、回溯引用和前后查找

    • () (定义一个子表达式)
    • 1 (匹配第1个子表达式,2代表第2个子表达式,依此类推)
    • ?= (向前查找)
    • ?<= (向后查找)

    查找IP地址初步版

    12.159.46.200(每组数字由1至3个数字组成)
    //正则表达式 d{1,3}.d{1,3}.d{1,3}.d{1,3}
    //子表达式 (d{1,3}.){3}d{1,3}一样的效果
    

    查找年份

    1967-08-17
    //正则表达式 19|20d{2}
    //结果只匹配19,因为|把左边和右边分别作为一个整体,解析为19或20d{2}
    //子表达式(19|20)d{2}
    //结果 1967
    

    查找IP地址加强版:每一组数字都在0-255之间(子表达式的嵌套)
    规则如下:
    1、任何一个1位或2位数字
    2、任何一个以1开头的3位数字
    3、任何一个以2开头、第2位数字在0-4之间的3位数字
    4、任何一个以25开头,第3位数字在0-5之间的3位数字

    (((d{1,2})|(1d{2})|(2[0-4]d)|(25[0-5])).){3}((d{1,2})|(1d{2})|(2[0-4]d)|(25[0-5]))
    

    回溯引用:模式的后半部分引用在前半部分中定义的子表达式

    this is a block of of text, several words here are are repeated, and and they should not be.
    //正则表达式 [ ]+(w+)[ ]+1
    //结果 of of 和 are are 及 and and 被匹配
    

    匹配html文本

    <h1>one paragraph</h1>
    <h2>two paragraph</h2>
    <h3>three paragraph</h2>
    //正则表达式 <h[1-6]>	.*?</h1>
    结果只匹配前两段
    

    回溯引用在替换操作中的应用

    313-555-1234
    248-555-9999
    810-555-90000
    //正则表达式 (d{3})(-)(d{3}(-)(d{4}))
    //替换 ($1) $3-$5
    //结果
    (313) 555-1234
    (248) 555-9999
    (810) 555-90000
    

    向前向后查找(Javascript不支持向后查找)

    <p>what a funny day</p>
    //正则表达式 (?<=<p>).*(?=</p>)
    //结果 what a funny day(没有开始和结束标签)
  • 相关阅读:
    猿辅导-去除数组中数量大于k的数
    OSI体系结构各层协议
    京东-学生合唱队分组
    146-LRUCache
    76-最长上升子序列
    无序数组中三个数字乘积最大值
    38-字符串的排列
    35-复杂链表的复制
    208-Implement Trie(Prefix Tree)
    69-求一个整数的平方根
  • 原文地址:https://www.cnblogs.com/u14e/p/5241549.html
Copyright © 2020-2023  润新知