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

Например:

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

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

 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 
 ~^(\w+)\s+\1(?:\W|$)~ ~^(\pL+)\s+\1(?:\PL|$)~u // unicode variant 

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

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

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

Не работая повсюду, см. Комментарии …

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

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