2013-11-12 2 views
0

Я использую следующее регулярное выражение в редакторе кода (возвышенный текст) для поиска комментариев ASP.NET.Регулярное выражение для одного совпадения

<%--.*(\n.*)*--%> 

Я хочу это регулярное выражение, чтобы прекратить смотреть любые вперед, как только первый --%> найден. Но он продолжает искать до последнего комментария --%>. У меня есть идея, что я должен использовать какой-то флаг, чтобы остановить его, как только первый --%>, но я не могу понять это.

Может кто-нибудь, пожалуйста, скажите, как я могу изменить это регулярное выражение?

UPDATE

Я забыл опубликовать некоторые примеры разметки. Вот он:

 <div class="modal-footer"> 
     <%--<button class="btn" data-dismiss="modal"> 
      Close</button> 
     <button id="btnAddCountry" class="btn btn-primary" data-dismiss="modal"> 
      Save changes</button>--%> 
    </div> 
</div> 
<div class="row-fluid"> 
    <div class="span12"> 
     <div class="box paint_hover"> 
      <div class="title"> 
       <h3>Sale Voucher</span> 
       </h3> 
      </div> 
      <div class="content"> 
       <ul id="tabExample1" class="nav nav-tabs"> 
        <li class="active"><a id="lnkAddEditVoucher" href="#AddEditVoucher" data-toggle="tab">Add/Update Sale Voucher</a></li> 
        <li><a id="lnkViewVouchers" href="#ViewVouchers" data-toggle="tab">Search Sale Voucher</a></li> 
        <%-- <li><a id="lnkViewParties" href="#ViewParties" data-toggle="tab">Search Parties</a></li>--%> 
       </ul> 

Я просто хочу совместить первый комментарий, а не второй.

+1

fyi, вы можете использовать '(. | \ N)' для соответствия всем, включая символы новой строки. Нет необходимости в странной конструкции, которую вы использовали в исходном регулярном выражении :) – ThiefMaster

+0

Рассмотрено. Спасибо :-) –

ответ

9

Вы должны сделать кванторы * неживыми. Обычно это делается путем добавления ? после них, например. .*? вместо .*.

Я также немного упростил регулярное выражение. Sublime Text поддерживает (?s) модификатора в начале шаблона, чтобы сделать матч точки даже новую строку:

(?s)<%--.*?--%> 

Если вы предпочитаете соответствие с новой строкой в ​​явном виде:

<%--(.|\n)*?--%> 
+1

Раньше называлось «неохотно» (+1) – Bohemian

+0

Также стоит отметить, что чередование может быть ненужным. Если Sublime предлагает модификатор 'PCRE_DOTALL','. 'Также будет соответствовать новым символам. – Dan

+0

@Bohemian - Да, не знал этого, спасибо. Я думаю, что «неохотно» более наглядно, чем «не жадный». –

1

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

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