PHP正则表达式函数举例使用讲解

更新时间:2017-09-26 15:39:05 来源:未知 作者:admin

在PHP中提供了两套正则表达式函数库

  一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。
  另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。
两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。

PHP中PCRE风格的函数

1、preg_match() 函数
函数原形:
int preg_match(string $pattern, string $content[,array $matches])
    preg_match()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。如果提供了$matches,则将匹配结果放入其中。$matches[0]将包含与整个匹配的文本,$matches[1]将包含第一个捕获的与括号中的模式单元所匹配的内容,以此类推。该函数只作一次匹配,最终返回0或1的匹配结果数。

<?php
    //需要匹配的字符串。date函数返回当前时间
    $content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together.";

    //使用通常的方法匹配时间
    if (preg_match ("/\d{4}-\d{2}-\d{2} \d{2}:\d{2} [ap]m/", $content, $m))
    {
        echo "匹配的时间是:" .$m[0]. "\n";
    }

    //由于时间的模式明显,也可以简单的匹配
    if (preg_match ("/([\d-]{10}) ([\d:]{5} [ap]m)/", $content, $m))
    {
        echo "当前日期是:" .$m[1]. "\n";
        echo "当前时间是:" .$m[2]. "\n";
    }
?>
2、preg_grep()函数
函数原型:
array preg_grep(string $pattern,array $input)
Preg_grep()函数返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配
<?php
    $subjects = array(
          "Mechanical Engineering",  "Medicine",
          "Social Science",          "Agriculture",
          "Commercial Science",     "Politics"
    );
    
    //匹配所有仅由有一个单词组成的科目名
    $alonewords = preg_grep("/^[a-z]*$/i", $subjects);
?>
3、preg_match_all()函数
    与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。本函数返回整个模式匹配的次数(可能为0),如果出错返回False。
<?php
    //功能:将文本中的链接地址转成HTML
    //输入:字符串
    //输出:字符串
    function url2html($text)
    {
        //匹配一个URL,直到出现空白为止
        preg_match_all("/http:\/\/?[^\s]+/i", $text, $links);

        //设置页面显示URL地址的长度
        $max_size = 40;
        foreach($links[0] as $link_url)
        {
            //计算URL的长度。如果超过$max_size的设置,则缩短。
            $len = strlen($link_url);

            if($len > $max_size)
            {
                $link_text = substr($link_url, 0, $max_size)."...";
            } else {
                $link_text = $link_url;
            }

            //生成HTML文字
            $text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text);
        }
        return $text;
    }
    
    //运行实例
    $str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.taoboor.com”;
    print url2html($str);

    /*输出结果
        这是一个包含多个URL链接地址的多行文字。欢迎访问<a href='http://www.taoboor.com'>
        http://www.taoboor.com</a>
    */
?>

4、preg_replace()函数
函数原形:
mixed preg_replace(mixed $patten,mixed $replacement,mixed $subject[,int $limit])
Preg_replace较ereg_replace的功能更加强大    ,其前三个参数均可以使用数组;第四个参数$limit可以设置替换的次数,默认为全部替换。
<?php
    //字符串
    $string = "Name: {Name}<br>\nEmail: {Email}<br>\nAddress: {Address}<br>\n";

    //模式
    $patterns =array(
            "/{Address}/",
            "/{Name}/",
            "/{Email}/"
    );

    //替换字串
    $replacements = array (
            "No.5, Wilson St., New York, U.S.A",
            "Thomas Ching",
            "tom@emailaddress.com",
    );

    //输出模式替换结果
    print preg_replace($patterns, $replacements, $string);
?>

5、preg_split()函数
本函数与split函数功能一致。
<?php
    $seek  = array();
    $text   = "I have a dream that one day I can make it. So just do it, nothing is impossible!";
    
    //将字符串按空白,标点符号拆分(每个标点后也可能跟有空格)
    $words = preg_split("/[.,;!\s']\s*/", $text);
    foreach($words as $val)
    {
        $seek[strtolower($val)] ++;
    }

    echo "共有大约" .count($words). "个单词。";
    echo "其中共有" .$seek['i']. "个单词“I”。";
?>

转载请注明来源网址:青锋建站-http://www.sjzphp.com/webdis/phpreg.html

电话 15632335515 | 邮箱 943703539@qq.com | QQ 943703539 | 微信 qingfengjianzhan

Copyright © 2016-2026 青锋建站 版权所有