zoukankan      html  css  js  c++  java
  • 正则表达式, 贪婪模式

    2018-2-28 10:15:09 星期三

    好几年没怎么用过正则了, 正则有一个常见的用法就是非贪婪模式

    方法一:

    ? 在 . + 和 * 之后 表示非贪婪匹配;

    *、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    这和 ? 本身代表0次或1次的限制有关

    . 除了换行符外的任意字符(可用修饰符/s使之匹配换行符)
    .* 匹配0个或多个任意字符
    .+ 匹配1个或多个任意字符
    .? 匹配0个或1个任意字符
    a{2} 匹配连续出现的2个a
    a{2,3} 匹配连续出现的2个或3个a
    a{2,} 匹配连续出现2个以上的所有a

    方法二:

    添加模式修饰符: U

    举例(PHP): 

    1 $a = 'aaaa0123456789';
    2 
    3 preg_match('#(d+)#', $a, $match); print_r($match); //贪婪匹配, 匹配尽可能多的数字
    4 preg_match('#(d+?)#', $a, $match); print_r($match); //非贪婪匹配, 最多只匹配一个数字 
    5 preg_match('#(d+)#U', $a, $match); print_r($match); //非贪婪匹配, 最多只匹配一个数字

    结果:

     1 //第3行匹配结果
     2 Array
     3 (
     4     [0] => 0123456789
     5     [1] => 0123456789
     6 )
     7 
     8 //第4行匹配结果
     9 Array
    10 (
    11     [0] => 0
    12     [1] => 0
    13 )
    14 
    15 //第5行匹配结果
    16 Array
    17 (
    18     [0] => 0
    19     [1] => 0
    20 )
  • 相关阅读:
    Python经典算法-快速幂
    HTML/CSS代码片段
    JavaScript代码片段
    全选、全不选、反选
    NodeJS入门
    Ajax入门
    伪协议触发onbeforeunload
    CSS优先级、引入方式、Hack
    iframe的操作
    四:JAVA 消息队列(blockingqueue)的应用
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/8482235.html
Copyright © 2011-2022 走看看