PHP中一些可以替代正则表达式函数的字符串操作函数


Posted in PHP onNovember 17, 2014

0x01:根据预定义的字符对字符串进行词法分析

<?php

/*

 * 在处理大量信息时,正则表达式函数会使速度大幅减慢。应当在需要使用正则表达式解析比较复杂的字符串时才能使用这些函数。如果要解析简单的表达式,还可以采用很多可以显著加快处理过程的预定义函数。

 */
/*

 * 根据预定义的字符对字符串进行词法分析

 * strtok()函数根据预定义的字符列表来解析字符串。其形式为:

 * string strtok(string str,string tokens)

 * strtok()函数,必须连续调用这个函数,才能完全的对一个字符串进行词法分析;每次调用该函数只是对字符串的下一部分做词法分析。但是,str参数只需要指定一次,因为函数会跟踪str中的位置,知道完全对str完成了词法分析,或者指定了心得str参数。

 * 如下面的例子所示:

 */

$info="lv chen yang|Hello:world&757104454@qq.com";

//定义界定符,包括(|)(:)( )(&)

$tokens="|:& ";

$tokened=strtok($info, $tokens);

while ($tokened)

{

 echo "Element:$tokened<br/>";

 //连续调用strtok()函数,完成对整个字符串的词法分析

 $tokened=strtok($tokens);

}

?>

0x02:根据预定义的定界符分解字符串

<?php 

/*

 * 根据预定义的定界符分解字符串:explode()函数

 * 次函数将字符串str分成子串数组,其形式为:

 * array explode(string separator,string str [, int limit])

 * 原字符串被根据separator指定的字符串分割为不同的元素。元素的数量可以通过可选的参数limit来限制。可以结合explode()/sizeof()和strip_tags()来确定给定文本块中单词的总数

 * 如下所示:

 */

$summary="

   In the latest installment of the ongoing Developer.com PHP series.

   I discuss the many improvements and addtions to

   <a href=\"http:www.php.com\">PHP</a> object-oriented architecture. 

   ";

echo "<br/>";

$words=explode(' ', strip_tags($summary));

echo "This sentence's lenght is:".sizeof($words);

/*

 * explode()函数始终比preg_split、spilt()和spliti()快得多。因此,在不需要使用正则表达式时,一定要使用这个函数。

 */

?>

0x03:将数组转换成字符串

<?php 

/*

 * 将数组转换成字符串

 * explode()函数可以根据界定字符将字符串转换为相应的数组,但是可以通过implode()函数将数组转换为规定的界定字符为界限的字符串

 * 其形式为:

 * string implode(string delimiter,array pieces)

 * 如下所示:

 */

$citys=array("Chengdu","Chongqing","Beijing","Shanghai","Guangzhou");

$citystring=implode("|", $citys);

echo $citystring;

?>

0x04:解析复杂的字符串

<?php 

/*

 * 解析复杂的字符串

 * strpos()函数在字符串中以区分大小写的方式找到substr第一次出现的位置,其形式为

 * int strpos(string str,string substr [,int offset])

 * 可选参数offset指定开始搜索的位置。如果substr不在str中,则strpos()返回False。可选参数确定strpos()从哪里开始搜索。

 * 以下例子将确定第一次访问index.html的时间戳:

 */

$substr="index.html";

$log=<<<logfile

192.168.1.1:/www/htdocs/index.html:[2013/06/26:13:25:10]

192.168.1.2:/www/htdocs/index.html:[2013/06/26:13:27:16]

192.168.1.3:/www/htdocs/index.html:[2013/06/26:13:28:45]

logfile;

echo "<br/>";

//$substr在log中首次出现的位置是什么

$pos=strpos($log, $substr);

//查找行结束的数值位置

$pos1=strpos($log,"\n",$pos);

//计算时间戳的开始

$pos=$pos+strlen($substr)+1;

//检索时间戳

$timestamp=substr($log, $pos,$pos1-$pos);

echo "The file index.html was first accessed on: $timestamp<br/>";

/*

 * 函数stripos()和函数strpos()函数用法相同,唯一的区别是stripos()不区分大小写。

 */

?>

0x05:找到字符串最后一次出现的位置

<?php 

/*

 * 找到字符串中最后一次出现的位置

 * strrpos()函数搜索字符串的最后出现的位置,返回它的位置(数值序号)其形式为:

 * int strrpos(string str,char substr [,offset])

 * 可选参数offset确定strrpos()函数的开始搜索位置。加入希望缩短冗长的新闻总结,

 * 截取总结中的某些部分,并用省略号代替所截去的部分。然而,并非简单的将总结明确的剪为所需的长度,

 * 你可能希望以一种对用户友好的方式进行剪切,截取到与阶段长度最接近的单词末尾。

 * 如下例子所示

 */

$limit=100;

$summary="In the latest installment of the ongoing Developer.com PHP series.

   I discuss the many improvements and addtions to

   <a href=\"http:www.php.com\">PHP</a> object-oriented architecture. ";

if(strlen($summary)>$limit)

 $summary=substr($summary, 0,strrpos(substr($summary, 0,$limit)," "))."...";

echo  $summary;

?>

0x06:用另外一个字符串替换字符串的所有实例

<?php 

/*

 * 用另外一个字符串替换字符串的所有实例

 * str_replace()函数以区分大小写的方式用另外一个字符串奇幻某个字符串的所有实例。其形式为:

 * mixed str_replace(string occurrence, mixed replacement, mixed str [,int count])

 * 如果str中没有找到occurrence,则str保持不变,如果定义了可选参数count,则只替换str中count个currence。

 * 此函数很适合对自动获取电子邮箱地址的程序隐藏电子右键地址,如下所示:

 */

$email="lvchenyang@live.cn";

$email=str_replace("@", "(at)", $email);

echo "<br/>".$email;

?>

0x07:获取字符串的一部分

<?php

/*

 * 获取字符串的一部分

 * strstr()函数返回字符串中从预定义的字符串的第一个出现开始的剩余部分(包括occurrence这个字符串)。其形式为:

 * string strstr(string str,string occurrence[,bool fefore_needle])

 * 可选参数before_needle会改变strstr()的行为,使函数返回字符串在第一个出先之前的部分。

 * 下面的例子是获取右键中的域名,结合ltrim()函数

 */

$url="lvchenyang@live.cn";

echo "<br/>".ltrim(strstr($url, "@"),"@");

?>

0x08:根据预定义的便宜返回字符串的一部分

<?php 

/*

 * substr()函数返回字符串中位于start和start+length之间的部分,其形式为:

 * string substr(string str,int start [,int length])

 * 如果没有指定的可选参数,则返回从start到str末尾的字符串

 * 如下所示

 */

$str="lvchenyang";

echo "<br/>".substr($str, 2,4);

//output: chen

?>

0x09:确定字符串出现的频率

<?php

/*

 * 确定字符串出现的频率

 * substr_count()返回一个字符串在另外一个字符串中出现的次数。其形式为:

 * int substr_count(string str,string substring [,int offset [,int length]])

 * 可选参数offset和length指定字符串便宜(从便宜处开始尝试匹配字符串)和字符串长度(从便宜开始搜索的长度)

 * 下面的例子确定了每个单词在这个sentence中出现的次数

 */

$talk=<<<talk

I am acertain that we could dominate mindshare in this space with

our new product, extablishing a true synergy beteen the marketing

and product development teams. We'll own this space in thress months.

talk;

echo "<br/>";

$sentencearray=explode(" ", $talk);

foreach ($sentencearray as $item)

{

 echo "The word <strong>$item</strong> appears(".substr_count($talk, $item).")times<br/>";

}

?>

0x10:用另一个字符串替换一个字符串的一部分

<?php 

/*

 * 用另外一个字符串替换一个字符串的一部分

 * substr_replace()函数将字符串中的一部分用另一个字符串替换,替换从指定的start位置开始,知道start+length位置结束。

 * 其形式为:

 * stringsubstr_replace(string str,string repalcement,int start和length的值。

 * 如下所示,替换电话号码中间4位

 */

$phonenum="15926841384";

echo "<br/>".substr_replace($phonenum, "****", 3,4);

?>
PHP 相关文章推荐
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
PHP类的封装与继承详解
Sep 29 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 #PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 #PHP
PHP中定义数组常量(array常量)的方法
Nov 17 #PHP
php中addslashes函数与sql防注入
Nov 17 #PHP
php数组排序usort、uksort与sort函数用法
Nov 17 #PHP
php中current、next与reset函数用法实例
Nov 17 #PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 #PHP
You might like
php递归列出所有文件和目录的代码
2008/09/10 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
python创建线程示例
2014/05/06 Python
python使用cPickle模块序列化实例
2014/09/25 Python
python处理csv数据的方法
2015/03/11 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python实现两个文件合并功能
2018/04/01 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
档案检查欢迎词
2014/01/13 职场文书
人事文员岗位职责
2014/02/16 职场文书
副总经理岗位职责
2014/03/16 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python