Question

How can you match the following words by PHP, either by regex/globbing/...?

Examples

INNO, heppeh, isi, pekkep, dadad, mum

My attempt would be to make a regex which has 3 parts:

  1. 1st match match [a-zA-Z]*
  2. [a-zA-Z]?
  3. rotation of the 1st match // Problem here!

The part 3 is the problem, since I do not know how to rotate the match. This suggests me that regex is not the best solution here, since it is too very inefficient for long words.

Was it helpful?

Solution

I think regex are a bad solution. I'd do something with the condition like: ($word == strrev($word)).

OTHER TIPS

Regexs are not suitable for finding palindromes of an arbitrary length.

However, if you are trying to find all of the palindromes in a large set of text, you could use regex to find a list of things that might be palindromes, and then filter that list to find the words that actually are palindromes.

For example, you can use a regex to find all words such that the first X characters are the reverse of the last X characters (from some small fixed value of X, like 2 or 3), and then run a secondary filter against all the matches to see if the whole word is in fact a palindrome.

In PHP once you get the string you want to check (by regex or split or whatever) you can just:

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

i think this regexp can work

  $re = '~([a-z])(.?|(?R))\1~';
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top