首页 > php教程 > PHP源码 > 正文

字符串之模式匹配

PHP中文网
发布: 2016-05-25 17:15:29
原创
1341人浏览过

php代码

PHP轻论坛
PHP轻论坛

简介PHP轻论坛是一个简单易用的PHP论坛程序,适合小型社区和个人网站使用。v3.0版本是完全重构的版本,解决了之前版本中的所有已知问题,特别是MySQL保留字冲突问题。主要特点• 简单易用:简洁的界面,易于安装和使用• 响应式设计:适配各种设备,包括手机和平板• 安全可靠:避免使用MySQL保留字,防止SQL注入• 功能完善:支持分类、主题、回复、用户管理等基本功能• 易于扩展:模块化设计,便于

PHP轻论坛 21
查看详情 PHP轻论坛
<?php
/**  
* @description: 获取模式串在主字符串中的所有首字母出现索引位置(递归版)  
* @author: cutefrog(injection.mail@gmail.com)  
* @parameter: $mainstr 主字符串(必要参数)  
* @parameter: $modestr 模式串(必要参数)
* @parameter: $mainpos 主字符串起始索引(可选参数)  
* @parameter: $modepos 模式串起始索引(可选参数)
* @parameter: $matcheds 匹配到的索引数组(不需传入的参数,只作为递归时函数传递参数之用)   
* @return: $matcheds 如果非空返回匹配到的索引数组,否则返回-1  
*/ 
   
     
   
function myStrPos_recursive( $mainstr, $modestr, $mainpos = 0, $modepos = 0, $matcheds = array() ) {   
  
  //若数组为空则返回-1,否则返回匹配到的数组
 if( !isset( $mainstr[$mainpos] ) ) {
   
      return empty($matcheds)?-1:$matcheds;
 }
   
   
  //如果匹配到了就继续与模式串的下一个字符比较
  if ( $modestr[$modepos] == $mainstr[$mainpos] ) {   
      
    if ( !isset($modestr[$modepos+1]) ){   
      
     //将匹配结果加入数组
     array_push( $matcheds, $mainpos - $modepos );  
   
     return myStrPos_recursive ( $mainstr, $modestr, ++$mainpos, 0, $matcheds );   
     
    }   
      
      
    return myStrPos_recursive ( $mainstr, $modestr, ++$mainpos, ++$modepos, $matcheds );   
     
  }
  //否则回溯主串字符数组索引
  else {   
    
    return myStrPos_recursive ( $mainstr, $modestr, $mainpos-=$modepos-1, 0, $matcheds );   
   
  }
   
}
/**
* @description: 获取模式串在主字符串中的所有首字母出现索引位置(迭代版)
* @author: cutefrog(injection.mail@gmail.com)
* @parameter: $mainstr 主字符串(必要参数)
* @parameter: $modestr 模式串(必要参数)
* @return: $matcheds 如果非空返回匹配到的索引数组,否则返回-1
*/
function myStrPos_iteration( $mainstr, $modestr ) {
  
  
 $mainlen = strlen( $mainstr );
  
 $modelen = strlen( $modestr );
 $matchedpos = -1;
 $limit = 0;
 $matcheds = array();
 for ( $mainpos = 0; $mainpos < $mainlen; $mainpos++ ){
  for ( $modepos = 0; $modepos < $modelen; $modepos++ )
   
    
   if ( $modestr[$modepos] == $mainstr[$mainpos] ){
    
    if ( $modepos == ( $modelen - 1 ) ){
     $matcheds[$limit++] = $mainpos - $modepos;
     break;
    }
    $mainpos++;
 
   }
   else {
    $mainpos = $mainpos - $modepos;
    break;
    
   }
 }
 
 return empty($matcheds)?-1:$matcheds;
}
 
$mainstr = 'dccabsccadsacca';
$modestr = 'cca';
print_r( myStrPos_recursive( $mainstr, $modestr ) );
print_r( myStrPos_iteration( $mainstr, $modestr ) );
?>
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号