PHP RegularExpression: (boşluklar dahil) her şey maç

2 Cevap php
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

i need to get two separate results from the above string:
1.

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

yani, ne olmalı iki ayrı regular expression patterns PHP Yukarıdaki iki sonuç almak için

2 Cevap

Ne bu böyle bir şey:

$str = <<<STR
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text
STR;

$m = array();
if (preg_match('#\{([a-zA-Z]+)\}(.*?)\{/\1\}#ism', $str, $m)) {
    var_dump($m);
}

Çıktı bu tür alacak Hangi:

array
  0 => string '{test}
    content
    content
    content
{/test}' (length=50)
  1 => string 'test' (length=4)
  2 => string '
    content
    content
    content
' (length=37)

Yani, içinde $m[0] Eğer bütün eşleşen dize (ie tags+content) var, ve $m[2] sadece etiketleri arasında içerik var.

Ben "jenerik" etiketleri kullanılır, ve özellikle "test" var Not; değiştirebileceğiniz sadece gerekecek eğer "test" etiketleri söyledi.

Detaylı bilgi için, bakmak, en azından yapabilirsiniz:

Etiketleri ve içeriğini birlikte yakalamak için:

/(\{test\}[^\x00]*?\{\/test\})/

Sadece içeriğini yakalamak için:

/\{test\}([^\x00]*?)\{\/test\}/