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中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 PHP
PHP实现的折半查找算法示例
Dec 19 #PHP
PHP实现的二分查找算法实例分析
Dec 19 #PHP
PHP实现git部署的方法教程
Dec 19 #PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
You might like
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php实现点击可刷新验证码
2015/11/07 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
JavaScript 事件参考手册
2008/12/24 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
jquery自定义表格样式
2015/11/23 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
js轮播图代码分享
2016/07/14 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python中turtle作图示例
2017/11/15 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
Python作用域与名字空间原理详解
2020/03/21 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
个人评价范文分享
2014/01/11 职场文书
个人典型事迹材料
2014/12/30 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
公司车辆管理制度
2015/08/04 职场文书