我在我的代码编辑器(sublime text)中使用以下正则表达式来搜索ASP.NET注释。
<%--.*(\n.*)*--%>
我希望这个正则表达式在找到第一个--%>
后立即停止向前看。但它一直在寻找,直到找到最后一条评论--%>
。我有这个想法,我必须使用某种旗帜让它尽快停止--%>
,但我无法弄明白。
任何人都可以告诉我如何修改这个正则表达式?
更新
我忘了发布一些示例标记。这是:
<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>
我只想匹配第一条评论,而不是第二条评论。
答案 0 :(得分:9)
您需要使*
量词非贪婪。通常,这是通过在它们之后添加?
来完成的,例如.*?
而非.*
。
我也简化了正则表达式。 Sublime Text支持模式开头的(?s)
修饰符,使点匹配甚至是换行符:
(?s)<%--.*?--%>
如果您希望明确地匹配换行符:
<%--(.|\n)*?--%>
答案 1 :(得分:1)
您似乎遇到的问题是您使用的贪婪版.*
匹配任何内容(包括--%>
)。尝试使用<%--.*?(\n.*?)*?--%>
代替非贪婪。