zoukankan      html  css  js  c++  java
  • 正则表达式

    什么是正则表达式:

      一种匹配字符串的规则

      计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

    1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

    2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

    正则表达式的特点是:

    # 可以定制一个规则,

    #1. 来确认某一个字符串是否符合规则

    #2. 从大段的字符串中找到符合规则的内容

    1. 灵活性、逻辑性和功能性非常强;

    2. 可以迅速地用极简单的方式达到字符串的复杂控制。

    3. 对于刚接触的人来说,比较晦涩难懂。

    应用场合:

    # 程序领域
    # 1.登录注册页的表单验证 web开发 要求简单语法
    # 2.爬虫
    # 爬虫 把这个网页下载下来 从里面提取一些信息,找到我要的所有信息,做数据分析
    # 3.自动化开发 日志分析

    由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

    例如:  

    # 是不是qq号码 : 全数字 5位以上 12位一下,第一位不是零
    # 是不是身份证号 : 18位/15位 第一位不是零 18位的最后一位可能是x或者数字
    # 有一个文件
    # 要你把这个文件中所有的手机号都摘取出来
    # 正则表达式能做什么


    元字符类:

      转义符, 表示转义 例如(. 表示真正意义上的点)

    .  表示任意一个字符  匹配出了换行符之外的任意字符

    ^a.的时候:

    ^a$的时候匹配不上字符:

    +  表示重复多次获这一次

    *  表示重复零次或者一次

    ?  表示重复零次或者一次

    + , * , ?   记忆顺序:  

    |  选择符号, 表示'或关系' , 例如: A|B , 匹配 A|B  如果两边你有重合部分则把

                               长的放前面

    {}  定义量词

    []  定义字符串, 字符组   ===>      [0-9]  表示0-9的数字范围

    ()  定义分组

    ^  可以表示取反, 或匹配一行的开始

    $  匹配一行的结束

    -  连字符

    字符类:

    \     匹配反斜杠字符

        匹配换行符

    f     匹配一个换页符

         匹配一个水平制表符

    v    匹配一个垂直的制表符

    s(小写)   匹配一个空格符等价于[ f v]  (包括空格, 回车, TAB)

    S(大写)   匹配一个空格符, 等价于[^s]

    d     匹配一个数字字符 == [0-9]    

      #    d{3} == d{0,3}  表示每三个数字进行一次匹配

      #    dd{3}  表示每四个数字进行一次匹配,而不够四个字符的时候不进行匹配

      #     d{3,}    表示至少是三个数字才进行匹配,但不管输入多少数字,都只匹配一

      #    d{1, 4}  表示出现最少出现一个数字, 最多出现四个数字就能进行一次匹配

      #   d?    ?表示只匹配一个字符或者零个字符.  在此处则就表示 无论如何都会匹配一次(在不输入的时候, 总是有一个开始字符,所以总会显示匹配一次.)

      #    d.?d*    表示即可以匹配小数,也可以匹配整数.(此处的   .   被?转义,变成匹配0次,可有可无.)但是也能匹配1.

    #    d.?d+  表示至少是两位数,  1. 是不会匹配的. 

      #     d*    表示匹配0次或多次  就是在不输入字符的时候也能匹配,输入的时候也能匹配.但是除了数字意外的只显示匹配次数而没有结果.

      例图:

          

    D     匹配一个非数字字符

    w     匹配任何语言的单词字符(如: 英文字母, 亚洲文字等)数字和

          下划线(_)等字符.如果编译标志位ASCII,则只匹配[a-zA-Z0-9]

    W      等价于[^w]

        匹配字符串的边界hello 边界为h和o h  and  o

      [dD] = [wW] = [sS]    可以匹配所有字符

    量词:

    ?  出现0次或一次

    *  出现零次或多次

    +  出现一次或者多次

     记忆方法:

    此处1表示?, 1之后的无穷大为+   两者组合为*

      表示自 '李'  开始到无穷大的匹配, 只有一个'李'也是可以匹配的

    李.+ :  表示至少是两位字符,  只有一个李是不会匹配的.(不包括换行)

    #    d{1, 4}  表示出现最少出现一个数字, 最多出现四个数字就能进行一次匹配

     #    李.{1, 3}  表示出现最少出现一个字符, 最多出现三个字符就能进行一次匹配

      

     #    李.{1, 3}?  表示在能匹配上的情况下尽量少字符匹配.   此处就是李后面再跟一个字符

      

    在能匹配上的情况下最大三个字符:

      

    注意:   ? 跟在元字符后面则就表示量词.  表示匹配一次或者0次

          而在量词后面加?    :    *?    ??    +?   [最后的问号,对前面的量词起作用.]    则表示取消贪婪匹配(即,将贪婪匹配转为惰性匹配).   

          

     .*?X ===>   表示匹配任意字符, 直到找到一个X(在爬虫中会经常用到)

    总结:

      元字符接量词   在应用中默认为贪婪匹配    

      元字符量词?    表示惰性匹配

      (量词只约束量词本身前面的一个元字符的出现次数  , 在往前的元字符不被约束)

      (同理:  ?   也只约束问号前面本身的量词或者元字符出现次数)

  • 相关阅读:
    数据结构实现(四)二叉查找树java实现
    数据结构实现(三)二叉树
    git
    抓包原理
    数据结构实现(二)队列
    86. Partition List
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    排序算法总结
    上下文切换详解
  • 原文地址:https://www.cnblogs.com/hfbk/p/9433947.html
Copyright © 2011-2022 走看看