2014-07-14 3 views
1

Использование регулярного выражения соответствует тексту точно после n строк.Сопоставьте текст точно после n строк

В приведенном ниже примере, я хочу, чтобы убедиться, что запрос именно после того, как 3-й линии от ID: 1

Пример:

signal { 
    id: 1 
    files: 1.bin 
    major: 338013710701 
    request { 
     reqId: 101 
     files: 1.bin 
     major: 35723057325 
     status: Sent 
    } 
    response { 
     resId: 201 
     files: 1.bin 
     major: 27151510570 
     status: Accepted 
    } 
} 

Примечание: Значение n будет меняться в зависимости от ввода (n может иметь значение не более 100). где n - количество строк, после которых присутствует строка

Я попытался с регулярным выражением /signal\s*{\s*id:\s*1\n[^\n]*\n[^\n]*\s*request/m для приведенного выше примера, так как n значение n минимально.

Может ли кто-нибудь помочь в создании регулярного выражения, если n равно 100? Спасибо заранее.

+0

Что такое actaully 'n' означает? число после поля reqID? –

ответ

1

{100} квантор указал, что предыдущий (\n[^\n]*) должно происходить ровно в 100 раз:

/signal\s{\s*id:\s*1(\n[^\n]*){100}request/m 

см demo

1

Try:

\bid: 1\b(?:.*\R){3}.*request 

Набор чувствительны к регистру и точка не совпадает linebreak

В приведенном выше \ R является одноименным разрывом строки. Не поддерживается в более ранних версиях Ruby, поэтому, если это проблема, замените что-то вроде \ n или любую последовательность строк, подходящую для вашей среды.

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