Регулярные выражения: найти 5 слов и меньше

Всем привет! Нужно найти в тексте выражения с нижними подчеркиваниями, которых не больше 5 во фразе. Например, в тексте "kjmkjd _lsvsdlk xclc_ sfojlfkl _cslv_ podksckjsfskwofj skfl _lsklsl slcslsla sll dfla ljfk_ sfpowlwfk sladjl _d d d d d d d d_ cjvkdsm _f_" должно найтись:

_lsvsdlk xclc\_
_cslv\_
_lsklsl slcslsla sll dfla ljfk\_
_f\_

Я пишу регулярное выражение: _(?:\B\D+?\s?){,5}?\_ И оно находит все вхождения, что перечислены выше, и _d d d d d d d d\_ (чего я не хочу искать). Подскажите, пожалуйста, в чем ошибка.


Ответы (1 шт):

Автор решения: Алексей Р

Если я правильно понял, то в группах, ограниченных подчеркиванием _, должно быть не более 5 слов, т.е. последовательностей символов, разделенных пробелами.
Попробуйте так:

_(?:[^_\s]+\s?){0,5}_

Если не нужны совпадения с __ (нулевое кол-во слов внутри подчеркиваний, что формально соответствует задаче), замените 0 в фигурных скобках на 1.
В выражении:
находим от 0 до 5 групп символов между подчеркиваниями _, которые не являются подчеркиваниями и пробелами [^_\s]+, но могут быть разделены пробелами \s?.
_d d d d d d d d_ не соответствует, поскольку содержит 8 слов, что больше 5.

Демо

→ Ссылка