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

Например:

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

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

4 ответа

Решение
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 вернуть истину.

$string = "Test Test";

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

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

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

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

Другие вопросы по тегам