zoukankan      html  css  js  c++  java
  • 11.2、正则表达式Perl风格函数的应用

    PHP 为使用 Perl 兼容的正则表达式搜索字符串提供了7个函数:
    1. preg_grep()
    2. preg_match()
    3. preg_match_all()
    4. preg_auote()
    5. preg_replace()
    6. preg_replace_callback()
    7. preg_split()
     
     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
    <?php

        /**
         * 1.preg_grep() 搜索字符串,搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组
         */

        $language = 
    array('php','asp','jsp','python','ruby');
        $mode = 
    '/p$/';
        print_r(preg_grep($mode, $language));
        
    ?>

    <?php 
    echo '<br />'?>

    <?php 
        
        
    /**
         * 2.preg_match() 搜索模式,最后返回 的是真或假,1/0
         */

        
    echo preg_match('/php[1-6]/''php5');
        
        
    // 电子邮件小案例
        $mode = '/([\w\.]{2,255})@([\w\-]{1,255}).([a-z]{2,4})/';
        $string = 
    'tony.w.src@gmail.com';
        
    if (preg_match($mode, $string)){
            
    echo '电子邮件合法';
        } 
    else {
            
    echo '电子邮件不合法';
        }

    ?>

    <?php 
    echo '<br />'?>

    <?php 

        
    /**
         * 3.preg_match_all() 匹配模式的所有出现,然后将所有匹配到的全部放入数组
         */

        preg_match_all(
    '/php[1-6]/''php5sdfsdsfphp4dsfsdfphp6fsdf', $out);
        print_r($out);

    ?>

    <?php 
    echo '<br />'?>

    <?php 

        
    /**
         * 4.preg_quote() 定界特殊的正则表达式,在每个对于正则表达式语法而言有特殊含义的字符前插入一个反斜线。
         * 这些特殊字符包含:$^*()+={}[]\\:<>
         */

        
    echo preg_quote('php 的价格是:$150')

    ?>
        
    <?php 
    echo '<br />'?>

    <?php 

        
    /**
         * 5.preg_replace() 替换模式的所有出现,搜索到所有匹配,然后替换成想要的字符串返回 出来
         */

        
    echo preg_replace('/php[1-5]/''python''php5dfsfphp6dsfsdfphp3');
        
        
    echo '<br />';
        
        
    // 贪婪和分组获取的使用
        $mode = '/\[b\](.*)\[\/b\]/U';
        $replace = 
    '<strong>\1</strong>';
        $string = 
    'This is a [b]php5[/b],This is a [b]php4[/b]';
        
    echo preg_replace($mode, $replace, $string);
        
    ?>

    <?php 
    echo '<br />'?>

    <?php 

        
    /**
         * 6.preg_replace_callback() 执行一个正则表达式搜索并且使用一个回调进行替换
         */
     
        
    // 将文本中的年份增加一年.
        $text = "April fools day is 04/01/2002\n";
        $text.= 
    "Last christmas was 12/24/2001\n";
        
    // 回调函数
        function next_year($matches)
        {
            
    // 通常: $matches[0]是完成的匹配
            // $matches[1]是第一个捕获子组的匹配
            // 以此类推
            return $matches[1].($matches[2]+1);
        }
        
    echo preg_replace_callback(
                
    '|(\d{2}/\d{2}/)(\d{4})|',
                
    'next_year',
                $text);
        
    ?>

    <?php 
    echo '<br />'?>

    <?php 

        
    /**
         * 7.prep_split() 以不区分大小写的方式将字符串划分为不同的元素
         */
     
        print_r(preg_split(
    '/@/''tony.w.src@gmail.com'));
        
    // 按 . 与 @ 进行分割
        print_r(preg_split('/[\.@]/''tony.w.src@gmail.com'));
        
    ?>
     
    注:
        目前为 PHP 使用 POSIX 风格的正则表达式搜索字符串提供了 7 个函数,包括:
    ereg()、ereg_replace()、eregi()、eregi_replace()、split()和sql_replace()。
    PS: 和 Perl 风格基本相同,参考手册学习。




  • 相关阅读:
    Codeforces Round #384 (Div. 2) 解题报告
    Codeforces Round #383 (Div. 2) 解题报告
    (DFS、bitset)AOJ-0525 Osenbei
    (DFS、全排列)POJ-3187 Backward Digit Sums
    自考新教材-p169
    自考新教材-p167
    自考新教材-p166
    自考新教材-p165
    自考新教材-p161
    自考新教材-p159
  • 原文地址:https://www.cnblogs.com/tonycody/p/2830468.html
Copyright © 2011-2022 走看看