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+mysql保存和输出文件
Oct 09 PHP
php实现mysql同步的实现方法
Oct 21 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
php格式化金额函数分享
Feb 02 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP验证码生成原理和实现
Jan 24 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
简单谈谈 php 文件锁
Feb 19 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
php实现JWT验证的实例教程
Nov 26 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/01/01 PHP
数据库查询记录php 多行多列显示
2009/08/15 PHP
php生成随机数的三种方法
2014/09/10 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
phpwind放自动注册方法
2006/12/02 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python Gitlab Api 使用方法
2019/08/28 Python
Python中base64与xml取值结合问题
2019/12/22 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
什么是servlet
2012/05/08 面试题
土地转让协议书
2014/09/27 职场文书
营销计划书范文
2015/01/17 职场文书
担保书格式
2015/01/20 职场文书
商务信函英语问候语
2015/11/10 职场文书