恰好一个匹配的正则表达式

时间:2013-11-12 13:27:11

标签: regex

我在我的代码编辑器(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>

我只想匹配第一条评论,而不是第二条评论。

2 个答案:

答案 0 :(得分:9)

您需要使*量词非贪婪。通常,这是通过在它们之后添加?来完成的,例如.*?而非.*

我也简化了正则表达式。 Sublime Text支持模式开头的(?s)修饰符,使点匹配甚至是换行符:

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

如果您希望明确地匹配换行符:

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

答案 1 :(得分:1)

您似乎遇到的问题是您使用的贪婪版.*匹配任何内容(包括--%>)。尝试使用<%--.*?(\n.*?)*?--%>代替非贪婪。