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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
php文件后缀不强制为.php的实操方法
Sep 18 PHP
PHP与Web页面交互操作实例分析
Jun 02 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
试用php中oci8扩展
2015/06/18 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
express.js中间件说明详解
2019/03/19 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
详解Python with/as使用说明
2018/12/13 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python 随机按键模拟2小时
2020/12/30 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
《风筝》教学反思
2014/04/10 职场文书
乳制品整治工作方案
2014/05/29 职场文书
大学生个人求职信例文
2014/07/07 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
甲午大海战观后感
2015/06/02 职场文书
初一年级组工作总结
2015/08/12 职场文书