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.