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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
非常好的php目录导航文件代码
Oct 09 PHP
深入php多态的实现详解
Jun 09 PHP
ThinkPHP之getField详解
Jun 20 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
php简单获取复选框值的方法
May 11 PHP
PHP下载文件的函数实例代码
May 18 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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中return的用法实例分析
2015/02/28 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
Python实现Dijkstra算法
2018/10/17 Python
python实现多层感知器
2019/01/18 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python简易版停车管理系统
2019/08/12 Python
Python求解正态分布置信区间教程
2019/11/20 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
保护环境建议书300字
2014/05/13 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
2015年维修工作总结
2015/04/25 职场文书
公司捐书倡议书
2015/04/27 职场文书
高中数学教学反思范文
2016/02/18 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
JavaScript实现优先级队列
2021/12/06 Javascript
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技