本文介绍了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反向引用以查找结束标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!