None of the other answers have efficiently/accurately answered your question:
For the fastest accurate pattern, use:
$input="input([[1,2,nc(2)],[1,2,nc(1)]])";
echo preg_match('/input\((.*)\)/i',$input,$output)?$output[1]:'';
// notice index ^
Or a slightly slower pattern that uses 50% less memory by avoiding the capture group, use:
$input="input([[1,2,nc(2)],[1,2,nc(1)]])";
echo preg_match('/input\(\K(.*)(?=\))/i',$input,$output)?$output[0]:'';
// notice index ^
Both methods will provide the same output: [[1,2,nc(2)],[1,2,nc(1)]]
Using a greedy * quantifier allows the pattern to move passed the nested parentheses and match the entire intended substring.
In the second pattern, \K resets the match's starting point and (?=\)) is a positive lookahead that ensures the entire substring is matched without including the trailing closing parenthesis.
EDIT: All that regex convolution aside, because you know your desired substring is wrapped in input( and ), the best, simplest approach is a non-regex one...
$input="input([[1,2,nc(2)],[1,2,nc(1)]])";
echo substr($input,6,-1);
// output: [[1,2,nc(2)],[1,2,nc(1)]]
Done.