php
  • regex
  • 2012-11-13 103 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

    非常感謝!我將不得不對修飾語做更多的研究。 –

    相關問題