Question

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

so, what should be the two separate regular expression patterns for PHP to get the above two results

Was it helpful?

Solution

What about something like this :

$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);
}

Which will get this kind of output :

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

So, in $m[0] you have the whole matched string (ie tags+content), and in $m[2] you only have to content between the tags.

Note I have used "generic" tags, and not specifically "test" ; you can change that if you'll only have "test" tags.

For more informations, you can take a look at, at least :

OTHER TIPS

To capture the tags and contents together:

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

To capture just the contents:

/\{test\}([^\x00]*?)\{\/test\}/
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top