2012-04-11 12 views
31

Potrzebuję sposobu przechwycenia tekstu między nawiasami kwadratowymi. Tak na przykład, następujący ciąg:Przechwytywanie tekstu między nawiasami kwadratowymi w PHP

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

Może być wykorzystywane do tworzenia następującą tablicę:

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

Mam następujące regex, /\[.*?\]/ ale tylko oddaje pierwszej instancji, tak:

Array ([0] => [This]) 

Jak mogę uzyskać dane wyjściowe, których potrzebuję? Zwróć uwagę, że nawiasy kwadratowe NIGDY nie są zagnieżdżone, więc nie stanowi to problemu.

+0

+1 Dzięki! Tak było. –

+0

Awans na "zjedz moje szorty", okrzyki dla fanów Simpsonów. –

Odpowiedz

72

wszystkie ciągi z nawiasami:

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

Jeśli chcesz ciągów bez nawiasów:

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

alternatywne, wolniejsza wersja dopasowanie bez nawiasów (używając "*" zamiast „[^] "):

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

A jeśli chcesz mieć ciągi między nawiasami: preg_match_all ("/\[(.*?)\]/",$ tekst, $ mecze); –

+3

@GertVandeVen: Backslashes wymagany. preg_match_all ("/ \\\((.*?)\\]/",$ tekst, $ mecze). Prawdopodobnie sieć usunięta Yours;) – Naki

+0

@GertVandeVen Weirdly, mam teraz następujące: 'Array ([0] => Array ([0] => [This] [1] => [test] [2] => [eat] ] [3] => [szorty]) [1] => Tablica ([0] => To [1] => test [2] => jeść [3] => szorty)) ' –

Powiązane problemy