2012-04-11 86 views
31

Tôi cần một số cách để chụp văn bản giữa các dấu ngoặc vuông. Vì vậy, ví dụ, chuỗi sau:Chụp văn bản giữa các dấu ngoặc vuông trong PHP

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

thể được sử dụng để tạo ra các mảng sau:

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

Tôi đã regex sau, /\[.*?\]/ nhưng nó chỉ nắm bắt được trường hợp đầu tiên, vì vậy:

Array ([0] => [This]) 

Làm cách nào để có được kết quả tôi cần? Lưu ý rằng các dấu ngoặc vuông KHÔNG BAO GIỜ lồng nhau, do đó, đó không phải là một mối quan tâm.

+0

+1 Cảm ơn! Điều đó đã làm điều đó. –

+0

Upvote cho "ăn quần short của tôi", cổ vũ cho một fan hâm mộ Simpsons. –

Trả lời

72

Matches tất cả các chuỗi với dấu ngoặc:

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

Nếu bạn muốn chuỗi mà không cần dấu ngoặc:

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

Alternative, phiên bản chậm hơn phù hợp với không có ngoặc vuông (sử dụng "*" thay cho "[^] "):

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

Và nếu bạn muốn các chuỗi giữa các dấu ngoặc: preg_match_all ("/\[(.*?)\]/",$ text, $ match); –

+3

@GertVandeVen: Yêu cầu dấu gạch chéo ngược. preg_match_all ("/\\[(.*?)\\]/",$ text, $ match). Có lẽ trang web đã loại bỏ Yours;) – Naki

+0

@GertVandeVen Thật kỳ lạ, bây giờ tôi nhận được những điều sau đây: 'Array ([0] => Array ([0] => [This] [1] => [test] [2] => [ăn ] [3] => [quần short]) [1] => Mảng ([0] => [1] => thử nghiệm [2] => ăn [3] => quần short)) ' –

Các vấn đề liên quan