首頁  >  文章  >  後端開發  >  詳解PHP字串匹配演算法

詳解PHP字串匹配演算法

小云云
小云云原創
2017-12-20 11:05:472833瀏覽

Sunday演算法是Daniel M.Sunday於1990年提出的字串模式匹配。其核心思想是:在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。本文主要介紹了PHP實現的字符串匹配算法,簡單描述了sunday算法的概念與原理,並結合實例形式分析了php基於sunday算法實現字符串匹配操作相關技巧,需要的朋友可以參考下,希望能幫助到大家。

<?php
/*
 *@param $pattern 模式串
 *@param $text 待匹配串
 */
function mySunday($pattern = &#39;&#39;,$text = &#39;&#39;){
  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匹配演算法_PHP教程

最簡單的php中字符串連比對演算法教學

以上是詳解PHP字串匹配演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn