代码改变世界

11.2、正则表达式Perl风格函数的应用

2012-12-24 00:40  TONY|小四  阅读(444)  评论(0编辑  收藏  举报
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 风格基本相同,参考手册学习。