[ÖRGÜsündeki] arasındaki dize almak için nasıl ... [/ LOOP]

3 Cevap php

how to get string between [LOOP]...[/LOOP] i try this but not work

$gloop = preg_replace('/\[LOOP\]([^\[]*)\[\/LOOP\]/', '\\1', $var);

... string:

'<tr>
	[LOOP]<th scope="col">%Gdata_All%</th>[/LOOP]
</tr>'

ama ben istiyorum [LOOP] dize ... [/ LOOP]

3 Cevap

Ben önce kendi kütüphane şablon oluştururken, söylemek istersiniz? Etrafında Smarty hangi şartları doldurmak gerekir gibi bazı olgun olanları vardır. Jeff Atwood Bu yazı aynı zamanda iyi okunur: "Don't Reinvent The Wheel, Unless You Plan on Learning More About Wheels"

Kendi çözüm rulo istiyorsanız o ince, burada bazı öneriler.

BBCode


Bu yöntem PHP ile yüklü BBCode uzantısı, bu yerli ve (yavaş) düzenli ifade motoru dayanmaz sahip dayanır. Bu çözüm probably hızlı olacaktır.

Sen BBCode ayrıştırıcı dönüştürmek olabilir

[LOOP]<td><?php print $row->title; ?></td>[/LOOP]

içine

<?php foreach($result as $row): ?><td><?php print $row->title; ?></td><?php endforeach; ?>

Look içine the BBCode arguments to learn about passing variables içine your [LOOP] syntax.

Sen bbcode_create yöntemi sayfada bazı daha fazla örnek görebilirsiniz.

Regular Expressions


Onlar biraz daha yavaş, ama tüm PHP yüklemelerinde varsayılan olarak etkindir.

Bu düzenli ifade (Onu yukarı oy gerekir) için bamya gitmek için kredi.

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/

Bundan sonra aşağıdaki kullanabilirsiniz.

if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
    # Successful match
    # You can access the content using $result[1];
} else {
    # Match attempt failed
}

-Mathew

Bu normal ifadeyi kullanabilirsiniz:

/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/

Bu başka herhangi bir karakterin dizisini maçları [ ([^[]+) veya [ bir /LOOP] ({[tarafından takip edilmez (4)]}, (?! expr ) a [LOOP] ve {[(9) arasında negatif ileriye dönük iddia) 'dir }]; (?: expr ) olmayan bir yakalama gruptur çevreleyen.

Eğer The Pixel Developer zaten işaret olarak biçimlendirilmiş kodu tespit etmek için gerçek bir ayrıştırıcı kullanmak Ama kesinlikle daha iyi olurdu.

$code = preg_match('/(.*?)\[LOOP\](.*?)\[\/LOOP](.*?)/ims', $var, $result3);

nasıl gidilir

echo $result[1];
echo $result[2];
echo $result[3];

ama echo $result[3]; için çalışmıyor