zoukankan      html  css  js  c++  java
  • 正则表达式之基础(三)

    获取匹配

    上面提到的子模式可以分为两种情况 - Capturing(获取匹配)和Non-Capturing(非获取匹配)

    获取匹配:匹配时会将所有子模式匹配结果存储起来,可供后面查找或者替换,比如后向引用。

    非获取匹配:子模式的匹配结果不会被存储,更多是作为一种限制条件,比如正反向肯定预查,正反向否定预查。

    后向引用

    使用“数字”表示前面第几个子模式的匹配结果

    例:

    Text:

    <h1>This is a capturing example</h1>

    <h2>This is a capturing example2</h3>

    Test Regular Expression:

    <(hd)>.*?</1>

    Results:

    <h1>This is a capturing example</h1>

    <h2>This is a capturing example2</h3>

    这里的“1”就是对前面第一个子模式(hd)匹配结果的引用,也就是引用“h1”

    后向引用的应用场景通常是:

    1.     匹配合法的html标记,就像上面的例子

    2.     匹配重复的内容

    非获取匹配

    (?:pattern)

    在子模式内部前面添加“?:”则表示该子模式是一个非获取匹配,也就意味着不可用于后向引用。只匹配,不保存。

    Text:

    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

    Test Regular Expression:

    Windows (?:w+)

    Results:

    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

    (?=pattern)

    正向肯定预查。 在子模式内部前面添加“?=”,表示该子模式仅仅作为匹配的限制条件,并不会被当做匹配结果输出,更谈不上保存匹配结果。预查是不消耗字符的,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从 包含预查的字符之后开始。可以理解为以什么结尾。

    Text:

    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

    Test Regular Expression:

    Windows (?=d+)

    Results:

    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

    Windows Vista和Windows Xp中的windows因不满足限制条件而没有匹配到

    (?!pattern)

    正向否定预查。在子模式内部前面添加“?!”,同正向肯定预查,表示该子模式仅作为匹配的条件。在上面的例子中,只有Windows Vista和Windows Xp中的windows会被匹配到并输出结果。可以理解为不以什么结尾。

    (?<=pattern)

    反向肯定预查,和正向预查差不多,只是预查的方向不一样。可以理解为以什么开头。

    Text:

    95 Windows and 98 Windows are the successor.
    Then 2000 Windows and Xp Windows appeared.

    Vista Windows is the Latest version of the family.

    Test Regular Expression:

    (?=d+) Windows

    Results:

    95 Windows and 98 Windows are the successor.
    Then 2000 Windows and Xp Windows appeared.

    Vista Windows is the Latest version of the family.

    (?<!pattern) - 反向否定预查,和正向预查差不多,只是预查的方向不一样。在上面的例子中Xp Windows和Vista Windows中的Windows会被匹配并输出。可以理解为不以什么开头。

  • 相关阅读:
    Linux 安装nginx
    Linux服务器svn与项目同步
    Linux服务器安装svn
    Thinkphp5模板继承
    Thinkphp5 Route用法
    一键切换hosts文件
    lnmp手动新建虚拟机
    wamp 配置虚拟主机
    百度编辑器
    百度编辑器:上传图片二
  • 原文地址:https://www.cnblogs.com/seanshao/p/6021298.html
Copyright © 2011-2022 走看看