İç içe regex ...

0 Cevap php

PHP ve regex için geldiğinde oldukça clueless değilim ama benim forum için bir kırık eklenti düzeltmek için çalışıyorum.

Ben şu değiştirmek istiyorum:

<blockquote rel="blah">foo</blockquote>

Ile

<blockquote class="a"><div class="b">blah</div><div class="c"><p>foo</p></div></blockquote>

Aslında bu kısım kolay ve zaten kısmen bunu yapmak için eklenti çözdüm. Aşağıdaki regex değiştirme yapmak için preg_replace_callback() için bir çağrı olarak kullanılıyor:

/(<blockquote rel="([\d\w_ ]{3,30})">)(.*)(<\/blockquote>)/u

Arama kodu:

return <<<BLOCKQUOTE
<blockquote class="a"><div class="b">{$Matches[2]}</div><div class="c"><p>{$Matches[3]}</p></div></blockquote>
BLOCKQUOTE;

Ve bu benim yukarıdaki örnekte (non-iç içe blockquotes) için çalışır. However, blockquotes, aşağıdaki örnekte olduğu gibi, iç içe eğer:

<blockquote rel="blah">foo <blockquote rel="bloop">bar ...maybe another nest...</blockquote></blockquote>

Bu çalışmıyor. Yani benim soru nasıl regex / PHP bir arada kullanarak tüm nested blockquotes yerine, nedir? Ben özyinelemeli desenleri (?R) PHP ile mümkün olduğunu biliyorum; aşağıdaki regex bunları içeren dize tüm yuvalanmış blockquotes çıkartacaktır:

/(<blockquote rel="([\d\w_ ]{3,30})">)(.*|(?R))(<\/blockquote>)/s

Ama oradan ben yukarıdaki değiştirme ile İç içe her blockquote değiştirmek için preg_replace_callback() geri arama yapmak için oldukça emin değilim.

Herhangi bir yardım mutluluk duyacağız.

0 Cevap