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配置心得包含MYSQL5乱码解决
Nov 20 PHP
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
PHP 命令行参数详解及应用
May 18 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 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+mysql留言本源码
2009/11/11 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
python发送伪造的arp请求
2014/01/09 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
python利用微信公众号实现报警功能
2018/06/10 Python
python datetime中strptime用法详解
2019/08/29 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
品恩科技软件测试面试题
2014/10/26 面试题
揠苗助长教学反思
2014/02/04 职场文书
服务标兵事迹材料
2014/05/04 职场文书
爱护公共设施标语
2014/06/24 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
个性发展自我评价2015
2015/03/09 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB