PRIG_MATCH反向引用以查找结束标记 [英] preg_match backreference to find ending tag

查看:35
本文介绍了PRIG_MATCH反向引用以查找结束标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用正则表达式来解析我拥有的模板。我要查找_start标记的_stop标记。我需要找到特定的标签,因为可以嵌套_stop_start标签。

我使用的正则表达式是

/{(.*?)_start}.*{(1_stop)}/s

并将其放入preg_match

和模板

<div data-role="collapsible-set" class="mfe_collapsibles" data-theme="c" data-inset="false">
        {MakeAppointment_start}
        <div id="appointmentHeading" data-action-id="appointmentNext" data-action-text="Next" data-a data-role="collapsible" data-collapsed="true" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-iconpos="right">
            <h3 class="collapsibleMainHeading">New {AppointmentTerm}</h3>
            <p>
                {AppointmentForm}
            </p>
        </div>
        {MakeAppointment_stop}
        {RegisterSection_start}
        <div id="registerHeading" class="preRegistration" data-action-id="register" data-action-text="Register" data-role="collapsible" data-collapsed="true" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-iconpos="right">
            <h3 class="collapsibleMainHeading">Register</h3>
            <p>
                {RegisterForm}
            </p>
        </div>
        {RegisterSection_stop}
        <div data-role="collapsible" class="preRegistration" data-collapsed="true" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-iconpos="right">
            <h3 class="collapsibleMainHeading">Login</h3>
            <p>
                {LoginForm}
            </p>
        </div>

    </div>
</div>

结果为

Array
(
    [0] => {MakeAppointment_start}
        <div id="appointmentHeading" data-action-id="appointmentNext" data-action-text="Next" data-a data-role="collapsible" data-collapsed="true" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-iconpos="right">
            <h3 class="collapsibleMainHeading">New {AppointmentTerm}</h3>
            <p>
                {AppointmentForm}
            </p>
        </div>
        {MakeAppointment_stop}
    [1] => MakeAppointment
    [2] => MakeAppointment_stop
)
索引0是正确的,但是1和2不正确。%1应具有注册标记和内容,%2不应存在。

我在这里做错了什么?

推荐答案

首先,preg_match仅返回一个匹配项。请改用preg_match_all。其次,你得到的指数1和2是你的捕获组。您可以简单地忽略它们,尽管您的第二个捕获组是相当多余的;您可以只删除正则表达式中的第二对或圆括号。使用preg_match_all将生成完全匹配以及所有匹配的所有捕获组。

我还认为您应该转义{},因为它们是正则表达式元字符。我想知道为什么发动机不这样卡住它们,但我认为不管怎样,最好还是逃脱它们。

这篇关于PRIG_MATCH反向引用以查找结束标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆