PHP Regex {tag} şey {/ tag} kapmak için

2 Cevap php

Ben PHP gebelik fonksiyonları (preg_match, vb) ve bu stumped ile kullanmak için bir regex dizeyle = gelip çalışıyorum:

Bunu nasıl dize maç?:

{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}

Ben preg_replace kullanarak farklı bir dize ile değiştirmek istiyorum.

Şimdiye kadar böyle preg_match ile ilk etiketi tanımlamak mümkün oldum:

preg_match("/\{(area-[0-9]*)\}/", $mystring);

Teşekkürler size yardımcı olabilir!

2 Cevap

Eğer iç içe etiketler yoksa, bir şey bu basit çalışması gerekir:

preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);

Sizin sonra sonuçlar bulunabilir $matches[1].

Ben öneririm

preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);

Diğer etiketleri bakıyoruz area etiketi iç içe olduğu, bu bile işe yarayacaktır.

Birbirinizi içinde yuvalanmış çeşitli area etiketleri varsa, hala çalışır, ama (bir kez yuvalama her seviye için) regex birkaç kez uygulamak gerekir.

Ve tabii ki, maçları içeriği değil $matches[1] Tatunun cevap olarak, $matches[2] olacaktır.