2010-03 << 2010-04 >> 2010-05

2010-04-05 (月)

*PHPで関数呼び出しっぽい文字列を抽出する正規表現

文字列から,関数呼び出しのような部分を抜き出して,関数と引数を取得してみる.

簡略化するために文字列とか途中のコメントの処理は抜きで.

<?php
$s = 'a=( testfunc((1+1),1+1*(1+1),123,f(1,2)) +1)';

if (preg_match('/(?P<func>\w+)\s*\( (?P<params> (?: (?:[^()]+) | (?P<p>\( (?: (?>[^()]+) | (?P>p) )* \) ) )* ) \)/msx',$s,$match)) {
    $f = $match['func'];
    $s = $match['params'];
    preg_match_all('/\G( (?: (?:[^(),]+) | (?P<p>\( (?: (?>[^()]+) | (?P>p) )* \) ) )+? )(?:,|$)/msx',$s,$match);
    echo $f."\n";
    print_r($match[1]);
}
2010-03 << 2010-04 >> 2010-05