php
  • regex
  • 2012-11-13 67 views 1 likes 
    1

    我是新来的正则表达式,我有一些麻烦。我想一开始{?} {} #user_data和{{/ USER_DATA?}}正则表达式在PHP中的大括号内找到html

    $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'; 
    

    我在做什么错之间的一切吗?

    +2

    编写自己的模板解析器?已经有很多好的... –

    +4

    你没有逃过'?'。如果作为元字符保留,它将匹配'a'选项.' – mario

    +0

    @WesleyMurch是的,我称之为:PHP。它本身就是*模板语言。 –

    回答

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

    这将输出:

    ​​

    i是没有必要的,如果应删除你需要区分大小写的模板;根据PHP Document about PCRE modifiers;

    m可能也是不必要的;

    s是必须的,所以你可以匹配多行字符串与点。

    +0

    非常感谢!我将不得不对修饰语做更多的研究。 –

    相关问题