2017-02-08 3 views
1

У меня возникают проблемы с повторением шаблона на нескольких линиях. Я верю, что это простая задача, но я просто не могу заставить ее работать!Регулярное удержание лома на нескольких линиях

Check this example: Users of (.*\s*)

Users of 85838NAVSIM_F: (Total of 2 licenses issued; Total of 2 licenses in use) 

----- ends here! 

    "85838NAVSIM_F" v1.000, vendor: adskflex 
    floating license 

    1 RESERVATION for PROJECT 1 (SRV02/27000) 

----- should catch to here (and repeat on next)! 

Users of 67600NAVMAN_F: (Total of 2 licenses issued; Total of 2 licenses in use) 

    "67600NAVMAN_F" v1.000, vendor: adskflex 
    floating license 

    1 RESERVATION for PROJECT 2 (SRV02/27000) 

Почему это не просто .* (? Любой символ, включая новую линию несколько раз) достаточно, чтобы поймать несколько строк? Как настроить регулярное выражение, чтобы оно работало по назначению?

Спасибо!

+0

Что здесь общего? Как вы определяете шаблон? –

+0

Я хочу поймать «Пользователи» и перейти до следующего события. – mottosson

+1

Хорошо, как https://regex101.com/r/SXeVCr/1? –

ответ

0

Я предлагаю использовать закаленное жадный маркер и полагаться на любой [^] или [\s\S], чтобы соответствовать любому символу, так как в JS регулярное выражение, точка поведение не может быть пересмотрена в связи с отсутствием/s модификатора DOTALL.

Использование

/^Users of (?:(?!^Users of)[\s\S])*/gim 

Смотрите regex demo

Детали

  • ^ - начало линии (как используется m модификатор, ^ соответствует началу строки и из линия)
  • Users of - буквальный символ последовательность
  • (?:(?!^Users of)[\s\S])* - закаленного жадного маркер соответствия любого символа (см [\s\S] = [^]) ноля или более раз (см *), который не начинает Users of подстроку в начале линии

То же развернутый регулярное выражение будет выглядеть

/^Users of .*(?:\r?\n(?!Users of).*)*/gim 

См another regex demo.

Здесь закаленное жадный маркер раскатывают в

  • .* - остаток строки после Users of
  • (?:\r?\n(?!Users of).*)* - ноль или более вхождений:
    • \r?\n - разрыв строки (может быть заменен на (?:\r\n?|\n) в соответствии с любым распространенным разрывом строки стиля) ...
    • (?!Users of) - это не сопровождается Users of подстрокой
    • .* - остальная часть линии.
+1

Отлично! Спасибо большое! Бит более сложный, чем я, хотя! = P – mottosson

+0

Обратите внимание, что развернутое регулярное выражение должно быть больше эффективный, так как он будет только «спотыкаться» при разрыве линии. Умеренный жадный токен будет «спотыкаться» над каждым персонажем. –

Смежные вопросы