2012-05-23 3 views
0

comment pouvez-vous obtenir la première sous-chaîne unique dans une chaîne donnée.php obtenir la première sous-chaîne unique

par exemple je veux trouver la chaîne unique étant demandé "tr6hrvjh" dans

$ string = "htr6hrvjhtr6hrvjhtr6hrvjhtr6hrvjh";

i essayé substr_count et en utilisant pour(), essayé aussi des boucles imbriquées. ne peut toujours pas le faire fonctionner avez-vous une méthode afin de récupérer la chaîne unique? ou est-il possible d'utiliser regex? J'utilise actuellement php. Si vous pouvez le faire dans d'autres langages de programmation, veuillez le faire.

- EDIT -

ok. juste ce que niftydude a déclaré la chaîne unique im se référant à est répété. Désolé pour ça. permettez-moi de reformuler la question

le premier caractère de $ string (h) est utilisé comme 'limiteur' pour la chaîne unique recherchée. il indique la fin de la chaîne unique recherchée.

le deuxième caractère (t) est le début de la chaîne unique. c'est pourquoi j'ai dit "tr6hrvjh"

ce que j'ai fait est bouclé par caractère dans la chaîne $ à partir du premier offset [1] qui est (t). la boucle ne se terminera si

  • Vous avez trouvé le caractère « limiteur » qui est « h »
  • La chaîne elle-même déjà répété par exemple pendant que vous déplacement sur la chaîne $ vous avez déjà « tr6hrvjh ». après plusieurs boucles, vous avez de nouveau détecté "tr6hrvjhtr6". votre boucle doit se terminer.

les conditions de la chaîne 'unique' sont:

  • doivent être alphanumériques uniquement
  • doit être> = 5
  • tous les caractères de la chaîne doit être $ dans cette 'unique' chaîne. par exemple, si la chaîne $ est htr6ahrvjhtr6ahrvjhtr6ahrvjh la chaîne unique doit être tr6ahrvjh pas tr6ah qui laisse rvjh dans la chaîne $

Notez que la chaîne de $ semble toujours de cette façon. le premier et le deuxième caractère agissent toujours comme le dernier et le premier caractère de la chaîne 'unique' respectivement. et la chaîne unique est toujours répétée dans $ string, aucun autre caractère entre ses répétitions.

Un autre problème est qu'il y a deux h dans la chaîne recherchée. Eh bien, j'espère que vous le comprenez.ne hésitez pas à commenter: D

- EDIT -

chaînes de test que j'ai rencontrées jusqu'à présent sont comme ceux que je viens de donner à vous

htr6hrvjhtr6hrvjhÔi§¯ŸÍ © ¥ g§¬ Ð × ™ ªhÖØ¡~|ÓkÕ¬šÕª- © «

htr6hrvjhtr6Ôi§¯ŸÍ © ¥ g§¬Ð ™ × ªhÖØ¡~|ÓkÕ¬šÕª- ©«

512354651235465Ôi§¯ŸÍ © ¥ g §¬Ð ™ × × ªhÖØ¡~|ÓkÕ¬šÕª © «

5123546512354651235Ôi§¯ŸÍ © ¥ g§¬Ð ™ × ªhÖØ¡~|ÓkÕ¬šÕª- ©«

+2

Comment 'tr6hrvjh' est-il une sous-chaîne unique? Je les vois répétés: o –

Répondre

1

Il est peut-être que je ne comprenais pas encore votre question correctement, mais essayez ceci:

function getUniqueString($string) { 
    $delimiter = $string[0]; 
    $chunks = array_filter(explode($delimiter, $string), function ($chunk) { 
    return preg_match('/^[0-9a-zA-Z]+$/', $chunk); 
    }); 

    return implode(array_unique($chunks)) . $delimiter; 
} 

démo: http://codepad.viper-7.com/oYoD40

+0

vous êtes un dieu. cela peut faire. bien que la fonction ne puisse pas fonctionner sur la chaîne que je suis en train de tester - http://codepad.viper-7.com/jOwfrR – kapitanluffy

+0

@kapitanluffy Quel serait le résultat attendu pour ce nouveau cas de test? Jusqu'à présent, je pensais que la chaîne unique formerait un motif répétitif (c'est l'idée de la trouver). – Yoshi

+0

celui-ci 'tr6rvjh' .i rencontré une nouvelle chaîne qui a un motif de répétition plus courte que celui que j'ai dit ci-dessus. bien que court il a encore réussi à répéter sur les 3 derniers caractères (tr6) avant les caractères non-alpha – kapitanluffy

Questions connexes