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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
用PHP连接Oracle数据库
Oct 09 PHP
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
php中http_build_query 的一个问题
Mar 25 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 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中英混合字符串截取函数代码
2011/07/17 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python+MongoDB自增键值的简单实现
2016/11/04 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
django框架ModelForm组件用法详解
2019/12/11 Python
python制作抽奖程序代码详解
2021/01/15 Python
python中最小二乘法详细讲解
2021/02/19 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
同学聚会欢迎辞
2014/01/14 职场文书
计算机相关的自我评价
2014/01/15 职场文书
《颐和园》教学反思
2014/02/26 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
女方离婚起诉书
2015/05/18 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
医者仁心观后感
2015/06/17 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python