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 )
  • 相关阅读:
    HDU 1106 排序
    strtok函数()
    HDU 2187汶川地震
    HDU 1716 排列2
    Rightmost Digit
    Text Reverse
    快速幂
    插入排序的一个应用-调整负数在前,正数在后,原来相对位置不变
    cuda 5.0配置vs2008+Visual Assist X +安装问题解决
    vc 热键、组合键的用法
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/8482235.html
Copyright © 2011-2022 走看看