Maison  >  Article  >  développement back-end  >  Explication détaillée et cas de l'algorithme du dimanche de l'algorithme de correspondance PHP

Explication détaillée et cas de l'algorithme du dimanche de l'algorithme de correspondance PHP

墨辰丷
墨辰丷original
2018-05-16 17:32:391090parcourir

Cet article présente principalement l'explication détaillée et les cas de l'algorithme du dimanche de l'algorithme de correspondance PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

L'algorithme Sunday est une correspondance de motifs de chaîne proposée par Daniel M. Sunday en 1990. L'idée principale est la suivante : pendant le processus de correspondance, lorsque la chaîne de modèle s'avère sans correspondance, l'algorithme peut sauter autant de caractères que possible pour l'étape suivante de correspondance, améliorant ainsi l'efficacité de la correspondance.

Le cas est le suivant :

<?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);

Résultats d'exécution :

The first match index is 25

Recommandations associées :

Structure des données de la pile PHP et algorithme de correspondance de crochets Exemple d'explication

Explication détaillée de l'algorithme de correspondance de chaînes PHP

Exemple de PHP implémentant l'algorithme du dimanche de l'algorithme de correspondance de chaînes

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn