更多优质内容
请关注公众号

PHP基础(十) PHP的正则表达式(下)-阿沛IT博客

正文内容

PHP基础(十) PHP的正则表达式(下)

栏目:PHP 系列:PHP基础系列 发布时间:2019-11-25 17:00 浏览量:3103


正则查询

1.函数preg_match() --执行一个正则表达式匹配
int preg_match(string $pattern, string $subject[,array &$matches])
搜索subject与pattern给定的正则表达式的一个匹配. 

2.函数preg_match_all() --执行全局正则表达式匹配
int preg_match_all(string $pattern ,string $subject ,array &$matches [, int $flags])
搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中. 参数flags是指定matches的数组格式。

3.函数preg_grep() --返回匹配模式的数组条目
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
返回给定数组input中与模式pattern 匹配的元素组成的数组。

4.其它子串处理函数:strstr()、strpos()、strrpos()、substr()

例一

<?php
    //preg_match()函数实例

    //一个用于匹配URL的正则表达式
    $pattern = '/(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|net|org)(\/[\w-\.\/\?\%\&\=]*)?/i'; 
    //被搜索字符串
    $subject = "网址为http://www.lampbrother.net/index.php的位置是LAMP兄弟连";    
    //使用preg_match()函数进行匹配
    if(preg_match($pattern, $subject, $matches)) {          
        echo "搜索到的URL为:".$matches[0]."<br>";    //数组中第一个元素保存全部匹配结果
        echo "URL中的协议为:".$matches[1]."<br>";    //数组中第二个元素保存第一个子表达式
        echo "URL中的主机为:".$matches[2]."<br>";    //数组中第三个元素保存第二个子表达式
        echo "URL中的域名为:".$matches[3]."<br>";    //数组中第四个元素保存第三个子表达式
        echo "URL中的顶域为:".$matches[4]."<br>";    //数组中第五个元素保存第四个子表达式
        echo "URL中的文件为:".$matches[5]."<br>";    //数组中第六个元素保存第五个子表达式
    } else {
        echo "搜索失败!";                             //如果和正则表达式没有匹配成功则输出
    }  
?>


例二

<?php
    //声明一个可以匹配URL的正则表达式
    $pattern = '/(https?|ftps?):\/\/(www|bbs)\.([^\.\/]+)\.(com|net|org)(\/[\w-\.\/\?\%\&\=]*)?/i';  
    //声明一个包含多个URL链接地址的多行文字
    $subject = "网址为http://bbs.lampbrother.net/index.php的位置是LAMP兄弟连,
            网址为http://www.baidu.com/index.php的位置是百度,
            网址为http://www.google.com/index.php的位置是谷歌。";
    $i = 1;    //定义一个计数器,用来统计搜索到的结果数
    //搜索全部的结果
    if(preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER)) {  
    foreach($matches as $urls) {     //循环遍历二维数组$matches
            echo "搜索到第".$i."个URL为:".$urls[0]."<br>";   
            echo "第".$i."个URL中的协议为:".$urls[1]."<br>";   
            echo "第".$i."个URL中的主机为:".$urls[2]."<br>";   
            echo "第".$i."个URL中的域名为:".$urls[3]."<br>";  
            echo "第".$i."个URL中的顶域为:".$urls[4]."<br>";   
            echo "第".$i."个URL中的文件为:".$urls[5]."<br>";  
            $i++;  //计数器累加
    }   
    } else {
            echo "搜索失败!";
    } 


例三

<?php
    $array = array("Linux RedHat9.0", "Apache2.2.9", "MySQL5.0.51", "PHP5.2.6", "LAMP", "100");
    
    //返回数组中以字母开始和以数字结束,并且没有空格的单元,赋给变量$version
    $version = preg_grep("/^[a-zA-Z]+(\d|\.)+$/", $array);  
    
    print_r($version);      
    
    //输出:Array ( [1] => Apache2.2.9 [2] => MySQL5.0.51 [3] => PHP5.2.6 )
?>


正则替换 

1. preg_replace —执行一个正则表达式的搜索和替换

mixed preg_replace ( mixed $pattern , mixed $replacement,mixed $subject [,int $limit = -1])

搜索subject中匹配pattern的部分, 以replacement进行替换


例四

 <?php
    //可以匹配所有HTML标记的开始和结束的正则表达式
    $pattern = "/<[\/\!]*?[^<>]*?>/is";             
    
    //声明一个带有多个HTML标记的文本
    $text = "这个文本中有<b>粗体</b>和<u>带有下画线</u>以及<i>斜体</i>
             还有<font color='red' size='7'>带有颜色和字体大小</font>的标记";         
    //将所有HTML标记替换为空,即删除所有HTML标记
    echo preg_replace($pattern, "", $text);     
    
    //通过第四个参数传入数字2,替换前两个HTML标记
    echo preg_replace($pattern, "", $text, 2);  


例五

<?php
    $pattern = "/(\d{2})\/(\d{2})\/(\d{4})/"; //日期格式的正则表达式
    
   $text="今年国庆节放假日期为10/01/2012到10/07/2012共7天。"; //带有两个日期格式的字串
    
    echo preg_replace($pattern, "\\3-\\1-\\2", $text); //将日期替换为以“-”分隔的格式
   
    echo preg_replace($pattern, "\${3}-\${1}-\${2}",$text); //将“\\1”改为“\${1}”的形式


例六

<?php
    //可以匹配所有HTML标记的开始和结束的正则表达式
    $pattern = "/(<\/?)(\w+)([^>]*>)/e"; 
    
    //声明一个带有多个HTML标记的文本
    $text = "这个文本中有<b>粗体</b>和<u>带有下画线</u>以及<i>斜体</i>还
             有<font color='red' size='7'>带有颜色和字体大小</font>的标记";    
    
    //将所有HTML的小写标记替换为大写        
    echo preg_replace($pattern, "'\\1'.strtoupper('\\2').'\\3'", $text); 


正则分割 

preg_split — 通过一个正则表达式分隔字符串

array preg_split (  string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

通过一个正则表达式$pattern分隔给定字符串$subject。其中$limit是最大替换个数。
flags可以是任何下面标记的组合
PREG_SPLIT_NO_EMPTY:返回分隔后的非空部分
PREG_SPLIT_DELIM_CAPTURE:用于分隔的模式中的括号表达式将被捕获并返回. 
PREG_SPLIT_OFFSET_CAPTURE:返回附加字符串偏移量

例七

<?php
    //按任意数量的空格和逗号分隔字符串,其中包含" ", \r, \t, \n and \f
    $keywords = preg_split ("/[\s,]+/", "hypertext language, programming");
    print_r($keywords);     
    //分割后输出Array ( [0] => hypertext [1] => language [2] => programming ) 
    
    //将字符串分割成字符
    $chars = preg_split('//', "lamp", -1, PREG_SPLIT_NO_EMPTY);
    print_r($chars);        //分割后输出Array ( [0] => l [1] => a [2] => m [3] => p ) 
    
    //将字符串分割为匹配项及其偏移量
    $chars = preg_split('/ /','hypertext language programming', -1, 
				PREG_SPLIT_OFFSET_CAPTURE);
    print_r($chars);    
    
    /* 分割后输出:
        Array ( [0] => Array ( [0] => hypertext [1] => 0 ) 
                   [1] => Array ( [0] => language [1] => 10 ) 
                   [2] => Array ( [0] => programming [1] => 19 ) )     */








更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > PHP基础(十) PHP的正则表达式(下)

热门推荐
推荐新闻