2012-04-11 16 views
31

Metni köşeli ayraçlar arasında yakalamanın bir yoluna ihtiyacım var. Yani, örneğin, aşağıdaki dize: bu yüzden, aşağıdaki regex, /\[.*?\]/ ancak yalnızca ilk örneği yakalar varPHP'de köşeli ayraçlar arasında metin yakalama

Array ( 
    [0] => [This] 
    [1] => [test] 
    [2] => [eat] 
    [3] => [shorts] 
) 

:

[This] is a [test] string, [eat] my [shorts].

aşağıdaki diziyi oluşturmak için kullanılabilir Could:

Array ([0] => [This]) 

İhtiyacım olan çıktıyı nasıl alabilirim? Köşeli parantezlerin ASLA iç içe geçmiş olduğunu unutmayın, bu bir sorun değildir.

+0

+1 Teşekkürler! Bu yaptı. –

+0

"Şortlarımı ye" için teşekkürler, bir Simpsons hayranı için alkışlar. –

cevap

72

Maçlar parantez ile tüm dizeleri:

$text = '[This] is a [test] string, [eat] my [shorts].'; 
preg_match_all("/\[[^\]]*\]/", $text, $matches); 
var_dump($matches[0]); 

Sen parantez olmadan dizeleri isterseniz: (kullanarak

$text = '[This] is a [test] string, [eat] my [shorts].'; 
preg_match_all("/\[([^\]]*)\]/", $text, $matches); 
var_dump($matches[1]); 

Alternatif, parantez olmadan eşleşen yavaş versiyonu "*" yerine "nin [^] "):

$text = '[This] is a [test] string, [eat] my [shorts].'; 
preg_match_all("/\[(.*?)\]/", $text, $matches); 
var_dump($matches[1]); 
+8

Ve köşeli ayraçlar arasında dizeleri istiyorsanız: preg_match_all ("/\[(.*?)\]/",$ text, $ match); –

+3

@GertVandeVen: Ters eğik çizgi gerekli. preg_match_all ("/\\[(.*?)\\]/",$ metin, $ eşleşme"). Muhtemelen web kaldırıldı Yours;) – Naki

+0

@GertVandeVen Garip, şimdi şunu elde ediyorum: 'Array ([0] => Array ([0] => [This] [1] => [test] [2] => [yemek ] [3] => [şort]) [1] => Array ([0] => Bu [1] => test [2] => ye [3] => şort)) –

İlgili konular