Question

Comment pouvez-vous faire correspondre les mots suivants par PHP, soit par regex / globbing /...?

Exemples

INNO, heppeh, isi, pekkep, dadad, mum

Je tenterais de créer une expression régulière à 3 parties:

  1. 1ère correspondance [a-zA-Z] *
  2. [a-zA-Z]?
  3. rotation du 1er match // problème ici!

La partie 3 est le problème, car je ne sais pas comment faire pivoter la correspondance. Cela me suggère que l'expression rationnelle n'est pas la meilleure solution ici, car elle est trop peu efficace pour les mots longs.

Était-ce utile?

La solution

Je pense que les regex sont une mauvaise solution. Je ferais quelque chose avec la condition suivante: ($ word == strrev ($ word)) .

Autres conseils

Les expressions rationnelles ne conviennent pas à la recherche de palindromes d’une longueur arbitraire.

Toutefois, si vous essayez de trouver tous les palindromes dans un grand ensemble de texte, vous pouvez utiliser regex pour rechercher une liste d'éléments susceptibles d'être des palindromes, puis filtrer cette liste de manière à: trouvez les mots qui sont réellement des palindromes.

Par exemple, vous pouvez utiliser une expression rationnelle pour trouver tous les mots tels que les premiers caractères X soient l'inverse des derniers X (à partir d'une petite valeur fixe de X, telle que 2 ou 3) , puis exécutez un filtre secondaire sur toutes les correspondances pour voir si le mot entier est en fait un palindrome.

En PHP, une fois que vous avez obtenu la chaîne que vous souhaitez vérifier (par regex, split ou autre), vous pouvez simplement:

if ($string == strrev($string)) // it's a palindrome!

Je pense que cette expression rationnelle peut fonctionner

  $re = '~([a-z])(.?|(?R))\1~';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top