ワーキングソリューション
以下を使用して必要なものを取得できたことを指摘してくれたmorgに感謝しtokenize
ます(テストのためにコントローラーに配置しました):
$lexer = new \Twig_Lexer(new \Twig_Environment());
$stream = $lexer->tokenize(new \Twig_Source('{{test|raw}}{{test2|raw|asd}}{{another}}{{help_me}}', null));
$variables = array();
while (!$stream->isEOF()) {
$token = $stream->next();
if($token->getType() === \Twig_Token::NAME_TYPE){
$variables[] = $token->getValue();
while (!$stream->isEOF() && $token->getType() !== \Twig_Token::VAR_END_TYPE) {
$token = $stream->next();
}
}
}
$variables = array_unique($variables);
これは以下を返します:
Array
(
[0] => test
[1] => test2
[2] => another
[3] => help_me
)
変数と関数の両方を取得したい場合は、ネストされた while ループを削除できますが、変数のみを取得し、関数は取得していないことに気付くでしょう (これは設計によるものです)。