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 相关文章推荐
整理的9个实用的PHP库简介和下载
Nov 09 PHP
php木马webshell扫描器代码
Jan 25 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
PHP多进程编程实例详解
Jul 19 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 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文本数据库的搜索方法
2006/10/09 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
Python读写Excel文件的实例
2013/11/01 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
基于Django用户认证系统详解
2018/02/21 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
摄影实习自我鉴定
2013/09/20 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
公司营业员的自我评价
2014/03/04 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
工会经费申请报告
2015/05/15 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers