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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
php按百分比生成缩略图的代码分享
May 10 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
php Session无效分析资料整理
Nov 29 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP实现的敏感词过滤方法示例
Mar 06 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 获取本机外网/公网IP的代码
2010/05/09 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
php中namespace及use用法分析
2016/12/06 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
React中的refs的使用教程
2018/02/13 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
webpack打包node.js后端项目的方法
2018/03/10 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python 查找字符串是否存在实例详解
2017/01/20 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Django自定义manage命令实例代码
2018/02/11 Python
python调用API实现智能回复机器人
2018/04/10 Python
python动态进度条的实现代码
2019/07/03 Python
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
员工教育培训协议书
2014/09/27 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
python接口测试返回数据为字典取值方式
2022/02/12 Python
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL