zoukankan      html  css  js  c++  java
  • 匹配重复

    1、匹配一个或多个字符                   匹配一个字符(或一个字符集合)的多次重复

    + 匹配一个或多个字符(至少一个:不匹配零个字符的情况)

    a匹配a本身,a+将匹配一个或多个连续出现的a

    [0-9]匹配任意单个数字,[0-9]+匹配一个或多个连续的数字

    提示:+是一个元字符,如果需要匹配+本身,就必须使用它的转义序列+

    2、匹配零个或多个字符           匹配一个字符(或一个字符集合)重复0次或多次

    * 匹配一个或多个字符(零个或多次)

    提示:*是一个元字符,如果需要匹配*本身,就必须使用它的转义序列*

    3、匹配零个或一个字符

    ? 只能匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次

    提示:?是一个元字符,如果需要匹配?本身,就必须使用它的转义序列?

    https
    http
    
    正则表达式:https?
    
    匹配结果
    
    https
    http

    匹配的重复次数

    +和*匹配的字符个数没有上限,无法为它们将匹配的字符个数设定一个最大值

    +、*和? 至少匹配0个或一个字符。无法为它们将匹配的字符个数另设定一个最小值

    +和* 无法为它们匹配的字符个数设定为一个精确的数字

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

    {n}  前一个字符(或字符集合)必须在原始文本里连续出现n次才算是匹配

    #33ffee
    #ffffff
    #666666
    #ff0000
    #999
    
    正则表达式 :#[0-9A-Fa-f]{6}
    
    匹配结果
    #33ffee
    #ffffff
    #666666
    #ff0000

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

    {min,max} 为重复匹配次数设定一个最小值和一个最大值

    {2,4}一个字符(或字符集合)最少重复2次,最多重复4次

    注意:重复次数可以是0,比如{0,3}表示重复次数可以是0、1、2、3次

    ?可以匹配一个字符(或字符集合)0次或1次。因此从效果上看,等价于{0,1}

    6、匹配“至少重复多少次”

    {n,} 表示一个字符(或字符集合)至少重复n次        只给出一个最小重复次数,但不必给出一个最大值

    $496.60
    $1299.99
    $26.43
    $613.42
    $7.69
    $25
    $389.1
    $500
    
    正则表达式   $d{3,}.d{2}
    匹配结果如下
    $496.60
    $1299.99
    $613.42

    7、防止匹配过度

    ?只能匹配0次或者1次

    {n}和{m,n}有一个重复次数的上限

    但其他的重复匹配语法在重复次数方面都没有上限值,而这样做有时会导致过度匹配的现象。

    this offer is not available to customers living in <B>AK</B> and <b>HI</b>
    
    正则表达式   <[Bb]>.*</[Bb]>
    
    匹配结果
    <B>AK</B> and <b>HI</b>

    为什么会出现这样,因为*和+都是所谓的“贪婪性”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止。

    它们尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到第一个匹配时为止。

    在不需要这种“贪婪行为”的时候该怎么办?答案是使用这些元字符的“懒惰性”版本,懒惰性元字符的写法很简单,只要给贪婪性元字符加上一个?后缀即可。

               常用的贪婪型元字符和它们的懒惰型版本

    贪婪型元字符            懒惰型元字符

    *                                                              *?

    +                   +?

    {n,}                  {n,}

    this offer is not available to customers living in <B>AK</B> and <b>HI</b>
    
    正则表达式  <[Bb]>.*?</[Bb]>
    
    匹配结果
    <B>AK</B>
    <b>HI</b>

    注意:大多数例子使用的都是“贪婪型”元字符,而我们这么做的出发点是为了让那些示例模式尽可能地简明易懂。在实际工作中,请务必根据具体情况来选用“贪婪型”或“懒惰型”元字符。

  • 相关阅读:
    C++ 资源大全中文版
    C++标准库和标准模板库
    非常实用全面的 C++框架,库类等资源
    Parse陨落,开发者服务今后路在何方?
    MySQL 创始人:写代码比打游戏爽,程序员应多泡开源社区
    用callgraph生成的函数调用关系图
    Qemu对x86静态内存布局的模拟
    几篇QEMU/KVM代码分析文章
    任务执行引擎的工程
    初涉核心域
  • 原文地址:https://www.cnblogs.com/ccgjava/p/7293757.html
Copyright © 2011-2022 走看看