正则表达式在PHP中的花括号之间找到html

时间:2012-11-13 23:12:02

标签: php regex

我是正则表达式的新手,我遇到了一些麻烦。我正在尝试获取{{#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';

我做错了什么?

1 个答案:

答案 0 :(得分: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不是必需的,如果您需要区分大小写的模板,则应将其删除;

根据{{​​3}};

m也可能是不必要的

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