首頁 >後端開發 >php教程 >PHP實作的字串比對演算法範例

PHP實作的字串比對演算法範例

jacklove
jacklove原創
2018-07-05 17:48:181791瀏覽

這篇文章主要介紹了PHP實現的字符串匹配算法,簡單描述了sunday算法的概念與原理,並結合實例形式分析了php基於sunday算法實現字符串匹配操作相關技巧,需要的朋友可以參考下方

本文實例講述了PHP實作的字串比對演算法——sunday演算法。分享給大家供大家參考,具體如下:

Sunday演算法是Daniel M.Sunday於1990年提出的字串模式匹配。其核心思想是:在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。

<?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效能分析工具xhprof的安裝使用與相關的注意事項


php封裝db類別連接sqlite3資料庫的方法實例講解

######

以上是PHP實作的字串比對演算法範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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