Как найти, если слова повторяются дважды подряд

Например, у меня есть следующий абзац в поле таблицы базы данных MySQL

«Отключение освещения объекта астрономического объекта, как в затмении Луны, когда Земля находится между"

Здесь слово « объект » появляется дважды подряд (рядом друг с другом).

Я хочу проверить, появляется ли этот случай в других записях в одной таблице. Есть ли простой способ сделать это, используя PHP и MySQL

if (preg_match('/\\b(\\w+)\\s\\1\\b/', $subject)) { //has repetition } 

Это регулярное выражение работает: (\b\w+\b)(?=\s?\1) (см. Пример )

Чтобы заставить его работать в MySQL, границы Word ( \b ) должны быть заменены эквивалентом MySQL [[:<:]] и [[:>:]] и \w с [[:alnum:]] :

 SELECT * FROM your_table WHERE your_field REGEXP '([[:<:]][[:alnum:]]+[[:>:]])(?=\\s?\\1)'; 

Но этот запрос дает ошибку, потому что, по словам Мэтта, MySQL не поддерживает обратные ссылки . Таким образом, это невозможно с текущим MySQL REGEXP.

Вы можете использовать следующее регулярное выражение для своих целей:

 (\b\w+)(?:\s+\1)+ 

или

 \b(\w+)(?:\s+\1)+ 

Это будет соответствовать любому количеству повторяющихся слов с любым количеством пробелов между словами.

Обратите внимание, что в зависимости от того, как работает механизм регулярных выражений MySQL или PHP (в зависимости от того, какой из них вы используете), возможно, потребуется экранирование обратных косых (и, возможно, скобок), и вам нужно будет использовать любые разделители, используемые движком regex для шаблонов. (Хотя, если MySQL не разрешает обратные ссылки как состояния Matt, тогда вам просто нужно использовать PHP для этого.)

EDIT: обновление с помощью проверки границы слова; не понимал, что \w не выполняет проверку границ слов автоматически для шаблонов preg.

SELECT * FROM table WHERE Поле REGEXP 'search term'

Вернет строки, содержащие соответствующий термин.

как насчет

 SELECT * FROM yourtable WHERE yourfield LIKE "%yourword%%yourword%" 

в моей быстрой тестовой таблице на localhost это сработало.