0
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

我需要从上面的字符串中得到两个单独的结果:
1。

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

那么,PHP的两个单独的正则表达式模式应该是什么才能获得上述两个结果

4

2 回答 2

3

像这样的东西怎么样:

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

这将得到这种输出:

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

所以,$m[0]你有整个匹配的字符串(即标签+内容)$m[2]你只需要标签之间的内容。

注意我使用了“通用”标签,而不是专门的“ test”;如果你只有“ test”标签,你可以改变它。

有关更多信息,您至少可以查看:

于 2009-12-09T05:44:39.270 回答
1

一起捕获标签和内容:

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

仅捕获内容:

/\{test\}([^\x00]*?)\{\/test\}/
于 2009-12-09T05:41:44.487 回答