0

私が持っているテンプレートを解析するために正規表現を使用しようとしています。_stopタグのタグを見つけたいです_start。タグがネストされている可能性があるため、特定のものを見つける必要が_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 には存在しない必要があります。

ここで何が間違っていますか?

4

1 に答える 1

2

まず、preg_match1 つの一致のみを返します。代わりに使用preg_match_allします。次に、取得したインデックス 1 と 2 は、キャプチャ グループです。2 番目のキャプチャ グループは非常に冗長ですが、単純に無視できます。正規表現の 2 番目のペアまたは括弧を削除するだけです。を使用preg_match_allすると、完全な一致と、すべての一致のすべてのキャプチャ グループが生成されます。

{また、 and}は正規表現のメタ文字であるため、エスケープする必要があると思います。なぜエンジンがこのように窒息しないのだろうかと思いますが、とにかく逃げる方が良いと思います。

于 2012-10-22T17:22:45.207 に答える