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 memcache扩展的三种安装方法
Apr 26 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
PHP技术开发微信公众平台
Jul 22 PHP
php简单判断文本编码的方法
Jul 30 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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面向对象全攻略 (五) 封装性
2009/09/30 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python关于反射的实例代码分享
2020/02/20 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
用python制作个视频下载器
2021/02/01 Python
css3的transition属性详解
2014/12/15 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
企业厂长岗位职责
2013/12/17 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
五型班组建设方案
2014/02/10 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
经典安踏广告词
2014/03/21 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
怎样写离婚协议书
2015/01/26 职场文书
邀请函怎么写
2015/01/30 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
公司管理建议书
2015/09/14 职场文书