Найти одно из слов в тексте (точное совпадение)
Есть строка:
"что-то кто-то"
Нужно найти - есть ли в ней точное совпадение одного из слов. Искать "что" и "кто".
Те чтобы "что-то" не совпадало с "что", так же как и "кто-то" с "кто".
Делаю так:
.*(\bчто\s|\bкто\s).*
В итоге получается. Но может так случиться что в искомой строке "что" - может поменяться на "что-то".Так же с "кто".
Тестю так:
1) .*(\bчто-то\s|\bкто\s).*. - работает
2) .*(\bчто\s|\bкто-то\s).*. - нет
Понятно почему оно не работает. Флаг \s - это символ - пробел||tab||пренос строки. А в тексте после "кто-то" нет никаких символов - это конец строки.
Как сделать так - чтобы в любом случае отрабатывало ? Нужно использовать одинаковый набор спец символов. Те понятно что решение:
.*(\bчто\s|\bкто\Z).*
отработает, но нужно чтобы была комбинация [\s или \Z] . Я пытаюсь делать так:
.*(\bчто[\s|\Z]|\bкто[\s|\Z]).*
не хочет отрабатывать. Подскажите пожалуйста как сделать правильно.
Ответы (1 шт):
Используйте
\b([кч]то)(\Z|\s)
Если необходимо совпадение целой строки, добавьте .* по краям:
.*\b([кч]то)(\Z|\s).*
Если у вас несколько альтернатив, используйте подмаску следующим образом:
.*\b(кто|что|ещё)(\Z|\s).*
Если можно использовать незахватывающие подмаски, используйте
.*\b(кто|что|ещё)(?:\Z|\s).*
Однако POSIX их обычно не поддерживает (так же как и \Z впрочем).