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中路径问题的解决方案
Oct 09 PHP
用PHP将数据导入到Foxmail
Oct 09 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
php文件上传、下载和删除示例
Aug 28 PHP
一个非常实用的php文件上传类
Jul 04 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 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
FCKeditor添加自定义按钮
2008/03/27 PHP
用php将任何格式视频转为flv的代码
2009/09/03 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
围观tangram js库
2010/12/28 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Django中信号signals的简单使用方法
2019/07/04 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
Python绘制组合图的示例
2020/09/18 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
制药工程专业职业生涯规划范文
2014/03/10 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
Nginx报404错误的详细解决方法
2022/07/23 Servers