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 高级课程笔记 面向对象
Jun 21 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
twig里使用js变量的方法
Feb 05 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 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入门小知识
2008/03/24 PHP
php header()函数使用说明
2008/07/10 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
Node.js实现简单管理系统
2019/09/23 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
scrapy爬虫实例分享
2017/12/28 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
python pygame实现2048游戏
2018/11/20 Python
python自动化之Ansible的安装教程
2019/06/13 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
幼儿园运动会加油词
2014/02/14 职场文书
2014学年自我鉴定
2014/02/23 职场文书
高中课程设置方案
2014/05/28 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
道士塔读书笔记
2015/06/30 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书