• 第七章:使用子表达式


    文本:

      Hello, my name is changlezhong  and my age is 18.

    正则表达式:

       {2,}

    结果:

      Hello, my name is changlezhong  and my age is 18.

    分析:

      结果什么也没匹配到,因为 {2,}只能匹配 ;;这样的文本,无法匹配  。所以就引入了子表达式。

    7.1 子表达式:

      子表达式使用 ( ) 括起来

    注意:

      ( 和 ) 是元字符,要相匹配其本身必须对其进行转义。

      正则表达式:

        ( ){2,}

      结果:

        Hello, my name is changlezhong  and my age is 18.

      分析:

        ( )是一个子表达式,它将被视为一个独立的元素,而紧跟在后面的{2,}将作用于这个子表达式(不仅仅是分号)。

    看一个例子,匹配ip地址:

      文本:

        pinging hog.forta.com [12.159.46.200] whith 32 byte of data

      正则表达式:

        d{1,3}.d{1,3}.d{1,3}.d{1,3}

      结果:

        pinging hog.forta.com [12.159.46.200] whith 32 byte of data

      使用子表达式进行简化:

        (d{1,3}.){3}d{1,3}

    匹配下面文本的年份:

      文本:

        ID:042

        SEX:M

        DOB:1997-08-18

        Status:Active

      正则表达式:

        19|20d{2}

      结果:

        ID:042

        SEX:M

        DOB:1997-08-18

        Status:Active

      分析:

        19|20d{2}表示19或者20开头的四位数字,应该将19|20作为一个子表达式,所以正确的正则表达式为 (19|20)d{2}

    7.2 子表达式嵌套:

      匹配ipV4的ip:ipV4由四组数字组成,ip地址都是(1~255).(0~255).(0~255).(0~255)的格式

      文本:

        pinging hog.forta.com [12.159.46.200] whith 32 byte of data

      分析:

        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]))

      结果:

        pinging hog.forta.com [12.159.46.200] whith 32 byte of data

    注意:

      上面的写法有些漏洞,|(或)匹配的时候将两位的匹配放在了三位的前面导致最后匹配到两位数字的时候就不再匹配,实际最后一组的数字为三位,所以应该将三位的匹配规则放在两位和一位之前。

      正确的正则表达式:

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

    备注:

      一般来说ip验证匹配都只是i纯ip文本校验 : ^(((d{1,2})|(1d{2})|(2[0-4]d)|(25[0-5])).){3}((1d{2})|(2[0-4]d)|(25[0-5])|(d{1,2}))$

  • 相关阅读:
    wpf之依赖属性
    wpf之布局控件
    WPF之绑定
    wpf之触发器
    wpf之样式
    wpf之TreeView
    wpf(五)
    【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
    Java读取批量Excel文件
    Centos上通过yum命令删除有关MySQL
  • 原文地址:https://www.cnblogs.com/changlezhong/p/9103213.html
Copyright © 2020-2023  润新知