zoukankan      html  css  js  c++  java
  • preg_match 与 preg_match_all

    案例一:

     1 <?php 
     2 
     3 $str = 'abcdef123456';
     4 preg_match('/[a-z1-9]+/', $str, $res);
     5 var_dump($res);
     6 
     7 preg_match('/([a-z1-9])+/', $str, $res);
     8 var_dump($res);
     9 
    10 preg_match('/(w)+/', $str, $res);
    11 var_dump($res);
    12 -------------------------------------------以上3个正则分别输出:
    13 array(1) {
    14   [0]=>
    15   string(12) "abcdef123456"
    16 }
    17 array(2) {
    18   [0]=>
    19   string(12) "abcdef123456"
    20   [1]=>
    21   string(1) "6"
    22 }
    23 array(2) {
    24   [0]=>
    25   string(12) "abcdef123456"
    26   [1]=>
    27   string(1) "6"
    28 }
    29 -------------------------------------------
    30 
    31 
    32 preg_match_all('/[a-z1-9]+/', $str, $res);
    33 var_dump($res);
    34 
    35 preg_match_all('/([a-z1-9])+/', $str, $res);
    36 var_dump($res);
    37 
    38 preg_match_all('/(w)+/', $str, $res);
    39 var_dump($res);
    40 -------------------------------------------以上3个正则分别输出
    41 array(1) {
    42   [0]=>
    43   array(1) {
    44     [0]=>
    45     string(12) "abcdef123456"
    46   }
    47 }
    48 array(2) {
    49   [0]=>
    50   array(1) {
    51     [0]=>
    52     string(12) "abcdef123456"
    53   }
    54   [1]=>
    55   array(1) {
    56     [0]=>
    57     string(1) "6"
    58   }
    59 }
    60 array(2) {
    61   [0]=>
    62   array(1) {
    63     [0]=>
    64     string(12) "abcdef123456"
    65   }
    66   [1]=>
    67   array(1) {
    68     [0]=>
    69     string(1) "6"
    70   }
    71 }
    72 -------------------------------------------
    73 此处拿preg_match 与 preg_match_all 说明 w   []  () 不同表达方式下,匹配的结果异同
    View Code

    案例二:

     1 <?php 
     2 
     3 $str = 'qwe.123.asd.456';
     4 preg_match('/([a-z]+).([1-9]+).([a-z]+).([1-9]+)/', $str, $res);
     5 var_dump($res);
     6 
     7 preg_match_all('/([a-z]+).([1-9]+).([a-z]+).([1-9]+)/', $str, $res);
     8 var_dump($res);
     9 -------------------------分别输出
    10 
    11 array(5) {
    12   [0]=>
    13   string(15) "qwe.123.asd.456"
    14   [1]=>
    15   string(3) "qwe"
    16   [2]=>
    17   string(3) "123"
    18   [3]=>
    19   string(3) "asd"
    20   [4]=>
    21   string(3) "456"
    22 }
    23 array(5) {
    24   [0]=>
    25   array(1) {
    26     [0]=>
    27     string(15) "qwe.123.asd.456"
    28   }
    29   [1]=>
    30   array(1) {
    31     [0]=>
    32     string(3) "qwe"
    33   }
    34   [2]=>
    35   array(1) {
    36     [0]=>
    37     string(3) "123"
    38   }
    39   [3]=>
    40   array(1) {
    41     [0]=>
    42     string(3) "asd"
    43   }
    44   [4]=>
    45   array(1) {
    46     [0]=>
    47     string(3) "456"
    48   }
    49 }
    50 --------------------------
    51 
    52 
    53 $str = 'qwe.123.asd.456';
    54 preg_match('/([a-z])+.([1-9])+.([a-z])+.([1-9])+/', $str, $res);
    55 var_dump($res);
    56 
    57 preg_match_all('/([a-z])+.([1-9])+.([a-z])+.([1-9])+/', $str, $res);
    58 var_dump($res);
    59 ------------------------分别输出
    60 
    61 array(5) {
    62   [0]=>
    63   string(15) "qwe.123.asd.456"
    64   [1]=>
    65   string(1) "e"
    66   [2]=>
    67   string(1) "3"
    68   [3]=>
    69   string(1) "d"
    70   [4]=>
    71   string(1) "6"
    72 }
    73 array(5) {
    74   [0]=>
    75   array(1) {
    76     [0]=>
    77     string(15) "qwe.123.asd.456"
    78   }
    79   [1]=>
    80   array(1) {
    81     [0]=>
    82     string(1) "e"
    83   }
    84   [2]=>
    85   array(1) {
    86     [0]=>
    87     string(1) "3"
    88   }
    89   [3]=>
    90   array(1) {
    91     [0]=>
    92     string(1) "d"
    93   }
    94   [4]=>
    95   array(1) {
    96     [0]=>
    97     string(1) "6"
    98   }
    99 }
    View Code

    上面2个案例,是为更好理解第三个案例. 

    案例三:

    preg_match与preg_match_all区别: 前者匹配成功后就放弃后续匹配;  后者第一次匹配成功后,继续匹配到结尾.

    preg_match_all涉及2种匹配方式.官方文档解释如下,int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

    PREG_PATTERN_ORDER:结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配, 以此类推. 

    PREG_SET_ORDER:结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组), $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组, 以此类推. 

     1 <?php 
     2 
     3 $str = '111-222;333-444';
     4 preg_match('/([1-9]+)-([1-9]+)/', $str, $res);
     5 var_dump($res);
     6 
     7 
     8 preg_match_all('/([1-9]+)-([1-9]+)/', $str, $res);//默认是PREG_PATTERN_ORDER 方式匹配
     9 var_dump($res);
    10 
    11 preg_match_all('/([1-9]+)-([1-9]+)/', $str, $res, PREG_SET_ORDER);//再看PREG_SET_ORDER 方式匹配
    12 var_dump($res);
    13 ---------------------------------以上3个正则输出
    14 
    15 array(3) {
    16   [0]=>
    17   string(7) "111-222"
    18   [1]=>
    19   string(3) "111"
    20   [2]=>
    21   string(3) "222"
    22 }
    23 array(3) {
    24   [0]=>
    25   array(2) {
    26     [0]=>
    27     string(7) "111-222"
    28     [1]=>
    29     string(7) "333-444"
    30   }
    31   [1]=>
    32   array(2) {
    33     [0]=>
    34     string(3) "111"
    35     [1]=>
    36     string(3) "333"
    37   }
    38   [2]=>
    39   array(2) {
    40     [0]=>
    41     string(3) "222"
    42     [1]=>
    43     string(3) "444"
    44   }
    45 }
    46 array(2) {
    47   [0]=>
    48   array(3) {
    49     [0]=>
    50     string(7) "111-222"
    51     [1]=>
    52     string(3) "111"
    53     [2]=>
    54     string(3) "222"
    55   }
    56   [1]=>
    57   array(3) {
    58     [0]=>
    59     string(7) "333-444"
    60     [1]=>
    61     string(3) "333"
    62     [2]=>
    63     string(3) "444"
    64   }
    65 }
    View Code
  • 相关阅读:
    如何强制360浏览器以极速模式打开页面
    如何解决Android SDK无法下载Package的问题(.net)
    Xamarin 安装步骤
    使用require.js和backbone实现简单单页应用实践
    HBuilder之初体验
    ClassLoader&双亲委派&类初始化过程
    List remove ConcurrentModificationException源码分析
    二十九、简谈设计模式
    二十八、Java基础--------正则表达式
    二十七、JDK1.5新特性---Annotation
  • 原文地址:https://www.cnblogs.com/qunshu/p/3176698.html
Copyright © 2011-2022 走看看