Вращение в регулярном выражении PHP - PullRequest
2 голосов
/ 29 октября 2009

Как вы можете сопоставить следующие слова с помощью PHP, либо с помощью regex / globbing /...?

Примеры

INNO, heppeh, isi, pekkep, dadad, mum

Моя попытка сделать регулярное выражение, состоящее из 3 частей:

  1. Первый матч матча [a-zA-Z] *
  2. [A-Za-Z]
  3. вращение 1-го матча // Проблема здесь!

Часть 3 - это проблема, так как я не знаю, как вращать матч. Это говорит о том, что регулярное выражение здесь не лучшее решение, поскольку оно слишком неэффективно для длинных слов.

Ответы [ 4 ]

4 голосов
/ 29 октября 2009

Я думаю, что регулярные выражения - плохое решение. Я бы сделал что-то с условием вроде: ($word == strrev($word)).

3 голосов
/ 29 октября 2009

Регулярные выражения не подходят для поиска палиндромов произвольной длины.

Однако, если вы пытаетесь найти все палиндромы в большом наборе текста, вы можете использовать регулярное выражение, чтобы найти список вещей, которые могут быть палиндромами, а затем отфильтровать этот список, чтобы найти слова, которые на самом деле являются палиндромами.

Например, вы можете использовать регулярное выражение, чтобы найти все слова так, чтобы первые символы X были обратными последним символам X (из некоторого небольшого фиксированного значения X, например 2 или 3), а затем запустите вторичный фильтр для всех совпадений, чтобы проверить, является ли все слово палиндромом.

1 голос
/ 29 октября 2009

я думаю, что это регулярное выражение может работать

  $re = '~([a-z])(.?|(?R))\1~';
1 голос
/ 29 октября 2009

В PHP, как только вы получите строку, которую хотите проверить (с помощью регулярного выражения или разбиения или чего-либо еще), вы можете просто:

if ($string == strrev($string)) // it's a palindrome!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...