1

我是正则表达式的新手,我遇到了一些麻烦。我正在尝试获取 {{#user_data?}} 和 {{/user_data?}} 之间的所有内容

$content = '
{{#user_data?}}
<span class="hello">
Hello, {{username}}!
</span>
{{/user_data?}}';

$key = 'user_data?';
$regex = '/\{\{#'.$key.'\}\}(.*?)\{\{\/'.$key.'\}\}/';
if (preg_match_all($regex, $content, $matches))
{
print_r($matches);
}
else
echo 'no match found';

我究竟做错了什么?

4

1 回答 1

2

除了注释的“不转义?符号”之外,您还需要适当的修饰符:

$content = <<<STR
{{#user_data?}}
<span class="hello">
Hello, {{username}}!
</span>
{{/user_data?}}
STR;

$key = 'user_data\?';
$regex = '/\{\{#'.$key.'\}\}(.*?)\{\{\/'.$key.'\}\}/sim';
preg_match_all($regex, $content, $matches,PREG_SET_ORDER);
print_r($matches);

这将输出:

Array
(
    [0] => Array
        (
            [0] => {{#user_data?}}
<span class="hello">
Hello, {{username}}!
</span>
{{/user_data?}}
            [1] => 
<span class="hello">
Hello, {{username}}!
</span>

        )

)

i不是必需的,如果您需要区分大小写的模板,则应将其删除;

m根据关于 PCRE 修饰符的 PHP 文档,也可能是不必要的;

s是必须的,因此您可以将多行字符串与点匹配。

于 2012-11-14T03:42:24.450 回答