PHP实现的字符串匹配算法示例【sunday算法】


Posted in PHP onDecember 19, 2017

本文实例讲述了PHP实现的字符串匹配算法————sunday算法。分享给大家供大家参考,具体如下:

Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。

<?php
/*
 *@param $pattern 模式串
 *@param $text 待匹配串
 */
function mySunday($pattern = '',$text = ''){
  if(!$pattern || !$text) return false;
  $pattern_len = mb_strlen($pattern);
  $text_len = mb_strlen($text);
  if($pattern_len >= $text_len) return false;
  $i = 0;
  for($i = 0; $i < $pattern_len; $i++){ //组装以pattern中的字符为下标的数组
    $shift[$pattern[$i]] = $pattern_len - $i;
  }
  while($i <= $text_len - $pattern_len){
    $nums = 0;   //匹配上的字符个数
    while($pattern[$nums] == $text[$i + $nums]){
      $nums++;
      if($nums == $pattern_len){
        return "The first match index is $i\n";
      }
    }
    if($i + $pattern_len < $text_len && isset($shift[$text[$i + $pattern_len]])){ //判断模式串后一位字符是否在模式串中
      $i += $shift[$text[$i + $pattern_len]];   //对齐该字符
    }else{
      $i += $pattern_len;   //直接滑动pattern_len位
    }
  }
}
$text = "I am testing mySunday on sunday!";
$pattern = "sunday";
echo mySunday($pattern,$text);

运行结果:

The first match index is 25

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP网上调查系统
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
PHP curl使用实例
Jul 02 PHP
php错误日志简单配置方法
Jul 11 PHP
php和redis实现秒杀活动的流程
Jul 17 PHP
laravel批量生成假数据的方法
Oct 09 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
php之header的不同用法总结(实例讲解)
Nov 28 #PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 #PHP
PHP命令空间namespace及use的用法小结
Nov 27 #PHP
Laravel 批量更新多条数据的示例
Nov 27 #PHP
PHP开发实现微信退款功能示例
Nov 25 #PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 #PHP
You might like
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
js实现随机点名小功能
2017/08/17 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
Python while循环使用else语句代码实例
2020/02/07 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
艺术应用与设计个人的自我评价
2013/11/23 职场文书
宣传普通话标语
2014/06/27 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
挂靠协议书
2015/01/27 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书