2010-12-26 15 views
18

PHP'de bazı düzenli ifadeler yapmaya çalışıyorum ve bu alanda çok yetenekli değilim. Bir dizede preg_replace gibi bir regex işlevi kullandığımda, regex ile değiştirilen dizelere $ 1, $ 2, vb. Adlı bir değişken türüne erişebilirim. Bu ne denir ve nasıl kullanabilirim?

cevap

31

Bunlar normal ifadede geri bildirimleri olarak bilinir (daha fazla bilgi için here). Bunları, regex'inizde veya yedek dizede bulunan yakalama gruplarına (veya () ile çevrili alt şablonlara) başvurmak için kullanırsınız.

Bir örnek: Onlar geribaşvuruları denir ve regexp içindeki öğeleri gruplanmış eşleşen

/* 
* Replaces abcd123 with 123abcd, or asdf789 with 789asdf. 
* 
* The $1 here refers to the capture group ([a-z]+), 
* and the $2 refers to the capture group ([0-9]+). 
*/ 
preg_replace('/([a-z]+)([0-9]+)/', '$2$1', $str); 
+0

Ama değişkenler tek tırnak içinde genişletmek olmadığını düşündü, ama ben test ettiğinde çalıştığını bunun nedeni nedir –

+2

PCRE geribaşvuruların gibi, "$' ile gösteriliyorlar, ama PHP değişkenleriyle ilgisi yok. PHP tarafından değil, regex motoru tarafından görülüyor ve değiştiriliyorlar. – BoltClock

+0

Tamam, bu mantıklı. Çok teşekkürler! –

6

. parantez ile regexp'nin bir bölümünü sarmak ise

, daha sonra konumuna karşılık gelen geribaşvuru ile, sonra aynı regexp'nin gerçekten de (ya da yerine bölümünde buna belirtebilir.

Eğik şekilde, veya dolar formu değiştirmeler de kullanılabilir:!.?

çok yardımcı olur
\1, \2 == $1, $2 
İlgili konular