Düzenli ifadeye göre dizi içine dize bölmek

3 Cevap php

Ben '[' takip, 0 veya daha fazla karakter tarafından takip ']' geçtiği için bir dize arayarak bir dizi oluşturmak gerekir.

Benim test dize:

$string="[item 1] [2] [] [item3]";

Yukarıdakilerin hepsi uyumlu olmalıdır.

Ben bunu regex olduğunu düşünüyorum

\[*\]

Ama nasıl dize dışında bir dizi oluşturmak mı? Ben kullanırım

preg_match_all("\[*\]", $string, $matches);

?

3 Cevap

preg_match_all('/\[.*?\]/', $string, $matches);

veya

preg_match_all('/\[[^\[\]]*\]/', $string, $matches);

İlki kısa sürede bir kapanış ayraç görür eşleşen durur, ama ilkini görürse bir açılış dirseğini maç olacak. O giriş mevcut ise, bu "[ [foo]" maç olduğunu ifade etti.

Sadece düzgün dengeli köşeli bulacaksınız, çünkü ikinci bir daha sağlamdır; yani, bunlar köşeli içeremez. Parantez iç içe olabilir eğer, ne regex çalışacaktır; Bu çok daha karmaşık bir sorun.

Kapanış:

preg_match_all("!\[.*?\]!", $string, $matches);

ve ardından $matches[0] dizelerini içerir.

Üç değişiklikler yapılmıştır:

  1. Sarılmış ifade! (Kullandığınız / veya ne olabilir);
  2. It * (sizin örnekte [* "0 veya daha fazla [" diyor) değil.; ve
  3. Bu olmayan açgözlü yapıldı. *?. Eğer yoksa o zaman temelde bütün dize içeren tek bir maç olacaktır. Finer points of PHP regular expressions bir göz atın.

Preg_split dene ()