首页 > 编程技术 > php

PHP常用字符串正则替换及剖分函数比较

发布时间:2016-11-25 16:47

本文章来给大家介绍PHP常用字符串正则替换及剖分函数比较,在php字符串正则替换大概有:str_replace、str_ireplace、substr_replace、preg_replace、preg_match、preg_match_all、preg_quote、preg_split、ereg_replace、eregi_replace、preg_replace、str_split函数,下面我来给大家介绍。

正则函数关系暧昧所以都放到一起比较一下,方便参考。

名称 支持正则 特点 备注
str_replace X 字符串替换函数,大小写敏感  
str_ireplace X 字符串替换函数,大小写不敏感,支持数组式批量替换 感谢网友franci,提醒添加
substr_replace X 部分替换字符串函数,可以指定位置index  
       
preg_replace Y 指定匹配模式进行替换,支持子串引用  优先使用
ereg_replace Y 指定匹配模式进行替换,大小写敏感,支持子串引用  
eregi_replace Y 指定匹配模式进行替换,大小写不敏感,支持子串引用  
       
ereg Y 指定模式全文匹配,可以用来匹配判断,或返回匹配数组  
preg_match Y 指定模式匹配一次退出,可以用来是否匹配判断,或使用返回的匹配数组  优先使用
preg_match_all Y 指定模式全文匹配,一般用来使用返回的匹配数组  优先使用
       
preg_split Y 指定匹配模式下正则剖分,如果能用最好还是使用explode或str_split  
str_split X 指定长度剖分字符串,默认单个字符剖分成数组  
explode X 可以指定单个或多个字符剖分字符串,成功则返回数组,例如12345按照34剖分则返回12和5  
       
 preg_quote  -  转义正则表达式字符,意思就是为特殊字符加上反斜线,正则表达式的特殊字符包括:. + * ? [ ^ ] $ ( ) { } = ! < > | : -  
       

补充说明:

1、在PHP中有两套正则表达式函数库,功能非常相似:

一套是POSIX(Portable Operating System Interface of Unix )库提供的,函数以ereg_前缀命名,POSIX正则函数库目前已经不再推荐使用

一套是PCRE(Perl Compatible Regular Expression)库提供的,函数以preg_前缀命名,推荐大家优先使用。在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/^w+$/”样式。

2、PHP正则表达式作用:匹配提取、匹配替换。

在php中字符替换函数有几个如有:str_replace、substr_replace、preg_replace、preg_split、str_split等函数,下面我来给大家总结介绍介绍。

一、str_replace(find,replace,string,count)

作用:str_replace() 函数使用一个字符串替换字符串中的另一些字符。

参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。一个变量,对替换数进行计数。

在本例中,我们将演示带有数组和 count 变量的 str_replace() 函数:

 代码如下 复制代码

<?php
$arr = array("blue","red","green","yellow");
print_r(str_replace("red","pink",$arr,$i));
echo "Replacements: $i";
?>输出:

Array
(
[0] => blue
[1] => pink
[2] => green
[3] => yellow
)
Replacements: 1

补充:count如果被指定,它的值将被设置为替换发生的次数。

二、substr_replace(string,replacement,start,length)

作用:substr_replace() 函数把字符串的一部分替换为另一个字符串。

参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换。

■正数 - 在第 start 个偏移量开始替换
■负数 - 在从字符串结尾的第 start 个偏移量开始替换
■0 - 在字符串中的第一个字符处开始替换
 
charlist 可选。规定要替换多少个字符。

■正数 - 被替换的字符串长度
■负数 - 从字符串末端开始的被替换字符数
■0 - 插入而非替换
 

例子

 代码如下 复制代码

<?php
echo substr_replace("Hello world","earth",6);
?>

输出:

Hello earth


三、preg_replace ( pattern , replacement , subject,limit = -1 ,$count  )

作用:执行一个正则表达式的搜索和替换

参数 描述
pattern 必需。需要搜索的模式。
replacement 必需。用于替换的字符串或数组。
subject 必需。需要替换的字符串或数组。
limit 替换的次数。-1为无限
count 完成替换的次数,变量

Example #1 使用后向引用紧跟数值原文

 代码如下 复制代码
<?php
$string = 'April 15, 2003';
$pattern = '/(w+) (d+), (d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>

 以上例程会输出:

April1,2003


Example #2 preg_replace()中使用基于索引的数组

 代码如下 复制代码
<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>

以上例程会输出:

The bear black slow jumped over the lazy dog.

四、preg_split ( pattern , subject,limit = -1 ,flag  )

作用:通过正则表达式分割字符串

参数 描述
pattern 必需。需要搜索的模式。
replacement 必需。用于替换的字符串或数组。
subject 必需。需要替换的字符串。
limit 被分割的字符串最多limit。
flag 模式

例 1672. preg_split() 例子:取得搜索字符串的成分

 代码如下 复制代码

<?php
// split the phrase by any number of commas or space characters,
// which include " ", r, t, n and f
$keywords = preg_split ("/[s,]+/", "hypertext language, programming");
?>

例 1673. 将字符串分割成字符

 代码如下 复制代码

<?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>

例 1674. 将字符串分割为匹配项及其偏移量

 代码如下 复制代码

<?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -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
)

)

五、str_split ( subject,length)

作用:将字符串分割成数组

参数 描述
subject 字符串。
length 每一段的长度。

例子 1

 代码如下 复制代码
<?php
print_r(str_split("Hello"));
?>

输出:

Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
)

例子 2

 代码如下 复制代码
<?php
print_r(str_split("Hello",3));
?>

输出:

Array
(
[0] => Hel
[1] => lo
)

如果你想使用php获取图片的高与宽我们可以直接利用php中的getimagesize函数来操作,下面我来给大家详细介绍getimagesize函数使用方法。

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

 代码如下 复制代码

<?php/* 1.jpg为你想获得其尺寸的图片 */
$arr = getimagesize("1.jpg");

/**
 * 这里$arr为一个数组类型
 * $arr[0] 为图像的宽度
 * $arr[1] 为图像的高度
 * $arr[2] 为图像的格式,包括jpg、gif和png等
 * $arr[3] 为图像的宽度和高度,内容为 width="xxx" height="yyy"
 */

/* 以下两行代码输出的内容都是一样的 */
echo "<img" width=100% src="1.jpg" $arr[3] alt="" />";
echo "<img" width=100% src="1.jpg" width="$arr[0]" height="$arr[1]" alt="" />";
?>

以上php代码被解释为内容为:

 代码如下 复制代码


<img" width=100% src="1.jpg" width="xxx" height="yyy" alt="" />
<img" width=100% src="1.jpg" width="xxx" height="yyy" alt="" />

Example #1 getimagesize(文件)

 代码如下 复制代码

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img" width=100% src="img/flag.jpg" $attr>";
?>

在php中提供了大量的对文件操作的函数,下面我来给大家总结php 文件函数对文件读入,写入操作,有需了解的这些函数的朋友可进入参考。

一、操作文件,获取文件信息

 代码如下 复制代码


<?php

    //打开文件
    $file_path="text.txt";
    if($fp=fopen($file_path,"r")){
        //取出文件的信息
        $file_info=fstat($fp);
        echo "<pre>";
        print_r($file_info);
        echo "</pre>";

        //单个的取出
        $file_size=$file_info['size'];
        //文件大小按字节来计算的
        echo "文件的大小为:".$file_size;
        echo  "<br/>文件上次访问的时间:".date("Y-m-d H:i:s",$file_info['atime']);  //atime表示【该文件上次被访问的时间】
        echo  "<br/>文件上次修改的时间:".date("Y-m-d H:i:s",$file_info['mtime']);  //mtime表示【该文件上次内容被修改的时间】
        echo  "<br/>文件上次change的时间:".date("Y-m-d H:i:s",$file_info['ctime']); //ctime表示【该文件上次 文件所有者/文件组 修改的时间】

    }else{
        echo "打开文件失败";
    }
   
    //关闭文件,这个非常重要
    fclose($fp);
?>

2、第二种获取文件信息方式

 代码如下 复制代码


<?php

    //第二种获取文件信息
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    echo "<br>".date("Y-m-d H:i:s",fileatime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filemtime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filectime($file_path));

    //echo "<br>".filemtime($file_path);
    //echo "<br>".filectime($file_path);
?>

二、读取文件操作

 代码如下 复制代码

<?php

    //读取文件
    $file_path="text.txt";

    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
   
    //打开文件
    $fp=fopen($file_path,"a+");
    //读取文件
    $content=fread($fp,filesize($file_path));
    echo "文件内容是:<br/>";
    //默认情况下把内容输出到网页后,不会换行显示,因为网页不识别rn
    //所有要把rn =><br/>
   
    $content=str_replace("rn","<br/>",$content);
    echo  $content;

    fclose($fp);
?>


 

2、第二种读取文件的方式

 代码如下 复制代码


<?php


    //第二种读取文件的方式

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    $content=file_get_contents($file_path);

    $content=str_replace("rn","<br/>",$content);
    echo  $content;
?>


 

3、第三种读取方法,循环读取(对付大文件)

 代码如下 复制代码


<?php


    //第三种读取方法,循环读取(对付大文件)

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    //打开文件
    $fp=fopen($file_path,"a+");
    //定义每次读取的多少字节
    $buffer=1024;
    //一边读取。一边判断是否达到文件末尾
    while(!feof($fp)){
        //按1024个字节读取数据
        $content=fread($fp,$buffer);
        echo $content;
    }

    fclose($fp);
?>


 

4、文件读取实际应用:当我们连接数据库的时候,可以把指定的数据配置到一个文件中,然后再PHP运行时,实时获取信息

 代码如下 复制代码

db.ini 文件

host=127.0.0.1
user=root
pwd=root
db=test


获取文件

 代码如下 复制代码


<?php

    $arr=parse_ini_file("db.ini");
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
   
    echo $arr['host'];

    //连接数据库
    $conn = mysql_connect($arr['host'], $arr['user'], $arr['pwd']);

    if(!$conn){
        echo "error";
    }

    echo "OK";
?>

三、写文件

 代码如下 复制代码

<?php

    //写文件
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    //"a+" 在文件后面追加  "w+"重新写入

    $fp=fopen($file_path,"w+");
    $con="rn你好";
    for($i=0;$i<10;$i++){
    fwrite($fp,$con);}

    echo "添加成功";
    fclose($fp);

   
?>

2、第二中方式  通过file_put_contents函数

 代码如下 复制代码


<?php


    //第二种方式写文件
    $file_path="text.txt";
    $content="hello,worldrn";

    //将一个字符串写入文件  默认是【FILE_USE_INCLUDE_PATH 】"w+"重新写入
    file_put_contents($file_path,$content,FILE_APPEND);

    echo "OK";
?>

在php中判断是否为数组很简单,php中利用is_array() 函数就可以快速判断变量是否为数组了,下面我来给大家介绍。

is_array — 检测变量是否是数组

Report a bug 描述
bool is_array ( mixed $var )

如果 var 是 array,则返回 TRUE,否则返回 FALSE。

 代码如下 复制代码

$a =1;

if( is_array( $a ) )
{
  echo '是数组';
}
else
{
   echo '不是数组0';
}

 代码如下 复制代码

<?php
function is_vector( &$array ) {
   if ( !is_array($array) || empty($array) ) {
      return -1;
   }
   $next = 0;
   foreach ( $array as $k => $v ) {
      if ( $k !== $next ) return false;
      $next++;
   }
   return true;
}
?>

判断是否索引数组的方法

echo is_assoc($array)?'索引数组':'不是索引数组';

 代码如下 复制代码

function is_assoc($array) {
        if(is_array($array)) {
            $keys = array_keys($array);
            return $keys != array_keys($keys);
        }
        return false;
}

标签:[!--infotagslink--]

您可能感兴趣的文章: