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 error_log 函数的使用
Apr 13 PHP
PHP n个不重复的随机数生成代码
Jun 23 PHP
一些php技巧与注意事项分析
Feb 03 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
php数组冒泡排序算法实例
May 06 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 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打开文件fopen函数的使用说明
2013/07/05 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
二级域名转向类
2006/11/09 Javascript
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
js读取配置文件自写
2014/02/11 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
Python 可爱的大小写
2008/09/06 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python实现名片管理器的示例代码
2019/12/17 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
计算机应用专业推荐信
2013/11/13 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
运动会加油口号
2014/06/07 职场文书
中药学自荐信
2014/06/15 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
python中 .npy文件的读写操作实例
2022/04/14 Python