Регулярное выражение для проверки того, являются ли два первых слова одинаковыми
Например:
$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);