Ваше регулярное выражение почти правильно, но нуждается в небольших изменениях.Вместо этого
^(?:\w+\s*){0,20}(food)
вы должны использовать это,
^(\w+\W+){0,19}food
В своем регулярном выражении вы написали {0,20}
, что на самом деле уже будет насчитывать 20 слов, и ваша еда станет 21-м словом, котороетогда не должно совпадать, как вы написали в своем сообщении, что соответствует слову food
с первыми 20 словами.Итак, если быть точным, вы должны исправить это на {0,19}.
Вторая проблема заключается в том, что вы написали \w+\s*
в своем регулярном выражении, поэтому, если ваша строка содержит что-либо, кроме слова илипробел (может быть пунктуацией или точкой или восклицательным знаком и т. д.), тогда это регулярное выражение не будет совпадать.Чтобы покрыть любой другой символ, вы должны безопасно использовать \W
символ, который будет соответствовать любому не-словесному символу.
И, как кто-то сказал в комментариях, вы должны удалить ^
из начала регулярного выражения, чтобы оно совпадало,но тогда он может совпадать, но тогда он будет не из первых двадцати слов и вместо этого найдет любой такой шаблон в середине текста, который будет неправильным.Поэтому сохраняйте каретку ^
(он же начальный якорь) для сопоставления только из первых 20 символов.
Демо
Дайте мне знать, если этоэто то, что вы искали.