我想解析一些使用正則表達式的輸入。輸入將在格式:REGEX解析模板回聲
{someValue中:3}
目的是顯示 'SOM'(無quotemarks)。
目前,我有:
'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?)\}~sU',
'replace' => "'.\$this->_get('\\1').'"
)
與我的模板系統的偉大工程,以呼應標準變量(即「someValue中」)。但是,我希望允許用戶使用:分隔符來限制要輸出的字符數(即{somevalue:3}將顯示'som')。
我想:
'echo' => array(
'search' => '~\{((?:'.$this->preg['var'].')(?:\.)?:(.*)/)\}~sU',
'replace' => "'.substr(\$this->_get('\\1'),0,\\2).'"
)
但這並沒有工作。我真的不明白正則表達式,所以任何幫助將不勝感激。
我明白你的意思是關於原來的{string}不再工作。爲了解決這個問題,我改變了它,這是數組中一個名爲'echolimit'的新元素,所以現有的標籤不受影響。我試過你的代碼,但沒有奏效。我將它改爲:''echolimit'=> array( 'search'=>'〜\ {((?:'。$ this-> preg ['var']。')(?:\。)? :(。*))\}〜sU', 'replace'=>「'.substr(\ $ this - > _ get('\\ 1'),0,'\\ 2')。'」 \t \t \t),'但現在它不顯示任何東西(其他現有{標籤}仍然完美)。 – Amo
substr應該將第一個參數作爲字符串,第二個作爲偏移量,第三個作爲長度。您的版本具有使用$ this - > _ get('\\ 2')的第三個參數 - 但是$ this - > _ get()是一個函數,用於從要顯示的模板中查找標記變量。在這種情況下,它應該具有的是在{stringtodisplay:limit}標記之後傳遞的數字 – Amo
由於我對您使用的模板引擎瞭解不多,因此我認爲'$ this-> _get('\\ 1')'意味着從$ this-> preg()調用中獲得第一個捕獲組。由於我們添加了第二個捕獲組來獲取數字,因此我假設$ this - > _ get('\\ 2')會執行此操作。我知道我的代碼嵌套捕獲組,這是沒有必要的。你可以試試這個嗎? ''echolimit'=> array('search'=>'〜\ {((?:'。$ this-> preg ['var']。')(?:\。)?):([0-9 ] +)\}〜sU','replace'=>「'.substr(\ $ this - > _ get('\\ 1'),0,\ $ this - > _ get('\\ 2'))。'')' –