substr() only matches whole strings. You are looking for preg_match().
Update:
$name = 'hello [*kitty*],how good is today';
preg_match( '/\[(.*?)\]/', $name, $match );
var_dump( $match );
You can find the name in $match[1]. I suggest you read up on regular expressions to understand preg_match().