Регулярное выражение для проверки того, являются ли два первых слова одинаковыми

Например:

$s1 = "Test Test the rest of string"
$s2 = "Test the rest of string"

Я хотел бы положительно сопоставить $s1, но не $s2, потому что первое слово в $s1 совпадает со вторым. Word 'Test' - пример, регулярное выражение должно работать над любыми словами.

Ответ 1

if(preg_match('/^(\w+)\s+\1\b/',$input)) {
  // $input has same first two words.
}

Пояснение:

^    : Start anchor
(    : Start of capturing group
 \w+ : A word
)    : End of capturing group
\s+  : One or more whitespace
\1   : Back reference to the first word
\b   : Word boundary

Ответ 2

~^(\w+)\s+\1(?:\W|$)~
~^(\pL+)\s+\1(?:\PL|$)~u // unicode variant

\1 является обратной ссылкой на первую группу захвата.

Ответ 3

Не работает везде, см. комментарии...

^([^\b]+)\b\1\b
^(\B+)\b\1\b

Получает первое слово и совпадает, если одно и то же слово повторяется после границы слова.

Ответ 4

Это не приводит к тому, что Test Testx возвращает true.

$string = "Test Test";

preg_match('/^(\w+)\s+\1(\b|$)/', $string);