Регулярные выражения: найти 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.