代码改变世界

11.1、了解正则表达式

2012-12-17 16:01  TONY|小四  阅读(356)  评论(0编辑  收藏  举报
一、第一个正则表达式
     
 PHP Code By http://t.qq.com/tony-src
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
    
    /**
     * 第一个正则表达式
     * 模式规则:  /内容/
     * 参数 1 :模式,匹配规则
     * 参数 2:字符串
     * 
     * 匹配规则:按照模式匹配,只要模式全部通过,那么就通过
     */

    $mode = 
'/PHP/';     // 规则模式
    $string = 'PHP';     // 字符串
    echo preg_match($mode, $string);
        
?>
 
二、正则表达式中的元素
    三种元素:(量词、元字符、修饰符)
    1. 量词

        
       PHP Code By http://t.qq.com/tony-src
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      <?php 
          
          /**
           * + 匹配任何至少包含一个前导字符串
           */

          $mode = 
      '/PH+P/';
          
      echo preg_match($mode, 'PHP');                      // 匹配
          echo preg_match($mode, 'PP');                       // 不匹配
          echo preg_match($mode, 'PHHHHP');                   // 匹配
          
          
      echo '<br />';
          
          
      /**
           * * 匹配任何包含零个或多个前导字符串
           * *号虽然可以是零个,但前导字符不能更改,更改就不匹配了
           */

          $mode = 
      '/PH*P/';
          
      echo preg_match($mode, 'PP');                       // 匹配
          echo preg_match($mode, 'POP');                      // 不匹配
          echo preg_match($mode, 'PHHHHP');                   // 匹配
          
          
      echo '<br />';
          
          
      /**
           * ? 匹配任何包含零个或一个前导字符串
           */

          $mode = 
      '/PH?P/';
          
      echo preg_match($mode, 'PP');                       // 匹配
          echo preg_match($mode, 'PHP');                      // 匹配
          echo preg_match($mode, 'PHHHHP');                   // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * . 匹配任意一个字符
           */

          $mode = 
      '/P.P/';
          
      echo preg_match($mode, 'PP');                       // 不匹配
          echo preg_match($mode, 'PHP');                      // 匹配
          echo preg_match($mode, 'PHHHHP');                   // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * .* 匹配任意字符,并且零个或多个
           */

          $mode = 
      '/P.*P/';
          
      echo preg_match($mode, 'PP');                       // 匹配
          echo preg_match($mode, 'PHP');                      // 匹配
          echo preg_match($mode, 'PHHdfsdsfsHHP');            // 匹配
          
          
      echo '<br />';
          
          
      /**
           * {x} 匹配任何包含x个前导字符串
           */

          $mode = 
      '/Ph{3}P/';
          
      echo preg_match($mode, 'PhhhP');                    // 匹配
          echo preg_match($mode, 'PHP');                      // 不匹配
          echo preg_match($mode, 'PP');                       // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * {x,y} 匹配任何包含x到y个前导字符串
           */

          $mode = 
      '/Ph{3,5}P/';
          
      echo preg_match($mode, 'PhhhP');                    // 匹配
          echo preg_match($mode, 'PhhhhP');                   // 匹配
          echo preg_match($mode, 'PhhhhhP');                  // 匹配
          echo preg_match($mode, 'PhP');                      // 不匹配
          echo preg_match($mode, 'PhhhhhhP');                 // 不匹配
          echo preg_match($mode, 'PP');                       // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * {x,} 匹配任何包含至少x个前导字符串
           */

          $mode = 
      '/Ph{3,}P/';
          
      echo preg_match($mode, 'PhhP');                     // 不匹配
          echo preg_match($mode, 'PhhhhP');                   // 匹配
          
          
      echo '<br />';
          
          
      /**
           * $ 匹配任何包含至少x个前导字符串
           */

          $mode = 
      '/PhP$/';
          
      echo preg_match($mode, 'PhhP');                     // 不匹配
          echo preg_match($mode, 'Ph');                       // 不匹配
          echo preg_match($mode, 'PhP');                      // 匹配
              
          
      echo '<br />';
          
          
      /**
           * ^ 匹配字符串的行首
           */

          $mode = 
      '/^PhP/';
          
      echo preg_match($mode, 'PhhP');                     // 不匹配
          echo preg_match($mode, 'Ph');                       // 不匹配
          echo preg_match($mode, 'PhPHP');                    // 匹配
          echo preg_match($mode, '2PhP');                     // 匹配
          
          
      echo '<br />';
          
          
      /**
           * | 匹配字符串的左边或者右边
           */

          $mode = 
      '/php|asp|jsp/';
          
      echo preg_match($mode, 'php');                      // 匹配
          echo preg_match($mode, 'asp');                      // 匹配
          echo preg_match($mode, 'php');                      // 匹配
          echo preg_match($mode, 'java');                     // 匹配
          
          
      echo '<br />';
          
          
      /**
           * () 包围一个字符分组或定义个反引用,可以使用\1\2提取
           */

          $mode = 
      '/(This) (is) (a) (engineer)\1/';
          
      echo preg_match($mode, 'This is a engineer');       // 不匹配
          echo preg_match($mode, 'This is a engineerThis');   // 匹配
          
      ?>
    2. 元字符

       
       PHP Code By http://t.qq.com/tony-src
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
      138
      139
      140
      141
      142
      143
      144
      145
      146
      147
      148
      149
      150
      151
      152
      153
      154
      155
      156
      157
      158
      <?php 
          
          /**
           * [a-z] 匹配任何包含小写字母 a-z 的字符串
           */

          $mode = 
      '/a[a-z]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'abphp');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [A-Z] 匹配任何包含大写字母A-Z 的字符串
           */

          $mode = 
      '/a[A-Z]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'aBphp');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [0-9] 匹配任何包含 0-9 的字符串
           */

          $mode = 
      '/a[0-9]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a10php');                   // 不匹配
          echo preg_match($mode, 'a8php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [abc] 匹配任何包含小写字母  a、b、c 的字符串
           */

          $mode = 
      '/a[abc]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'aaphp');                    // 匹配
          echo preg_match($mode, 'akphp');                    // 不匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [^abc] 匹配任何不包含小写字母  a、b、c 的字符串
           */

          $mode = 
      '/a[^abc]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'aaphp');                    // 不匹配
          echo preg_match($mode, 'akphp');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [a-zA-Z0-9_] 匹配任何包含 a-zA-Z0-9 和下划线 的字符串
           */

          $mode = 
      '/a[a-zA-Z0-9_]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 匹配
          echo preg_match($mode, 'a_php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\w] 匹配任何包含 a-zA-Z0-9 和下划线 的字符串
           */

          $mode = 
      '/a[\w]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 匹配
          echo preg_match($mode, 'a_php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\W] 匹配任何没有下划线和字母数字的字符串
           */

          $mode = 
      '/a[\W]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 不匹配
          echo preg_match($mode, 'a$php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\d] 匹配任何数字字符,和[0-9]相同
           */

          $mode = 
      '/a[\d]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 匹配
          echo preg_match($mode, 'a$php');                    // 不匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\D] 匹配任何非数字字符,和[^0-9]相同
           */

          $mode = 
      '/a[\D]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 不匹配
          echo preg_match($mode, 'a$php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\s] 匹配任何空白字符
           */

          $mode = 
      '/a[\s]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 不匹配
          echo preg_match($mode, 'a php');                    // 匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\S] 匹配任何非空白字符
           */

          $mode = 
      '/a[\S]php/';
          
      echo preg_match($mode, 'aphp');                     // 不匹配
          echo preg_match($mode, 'a8php');                    // 匹配
          echo preg_match($mode, 'a php');                    // 不匹配
          echo preg_match($mode, 'php');                      // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\b] 匹配是否到达了单词边界
           */

          $mode = 
      '/php\b/';
          
      echo preg_match($mode, 'php is language');          // 匹配
          echo preg_match($mode, 'phpis language');           // 不匹配
          
          
      echo '<br />';
          
          
      /**
           * [\B] 匹配是否到达了单词边界
           */

          $mode = 
      '/php\B/';
          
      echo preg_match($mode, 'php is language');          // 不匹配
          echo preg_match($mode, 'phpis language');           // 匹配
          
          
      echo '<br />';
          
          
      /**
           * [\] 匹配正则中的特殊字符
           */

          $mode = 
      '/php\+/';
          
      echo preg_match($mode, 'php+ is language');         // 匹配
          echo preg_match($mode, 'phpis language');           // 不匹配
          
      ?>
    3. 修饰符

       
       PHP Code By http://t.qq.com/tony-src
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      <?php 
          
          /**
           * i 完成不区分大小写的搜索
           */

          $mode = 
      '/php/i';
          
      echo preg_match($mode, 'php');                      // 匹配
          echo preg_match($mode, 'PHP');                      // 匹配
          
          
      echo '<br />';
          
          
      /**
           * m 在匹配首内容或者尾内容时候采用多行识别匹配
           */

          $mode = 
      '/php$/m';
          
      echo preg_match($mode, "This is php\n,is good");    // 匹配
          
          
      echo '<br />';
          
          
      /**
           * x 忽略正则中的空白
           */

          $mode = 
      '/p h p/x';
          
      echo preg_match($mode, 'php');                      // 匹配
          
          
      echo '<br />';
          
          
      /**
           * A 强制从头开始匹配
           */

          $mode = 
      '/php/A';
          
      echo preg_match($mode, 'aphpjava');                 // 不匹配
          echo preg_match($mode, 'phpjava');                  // 匹配
          
          
      echo '<br />';
          
          
      /**
           * U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束
           */

          $mode = 
      '/a.+b/U';
          
      ?>