What are the limitations of using regular expressions for parsing nested parentheses structures, and why would a Tokenizer be a more suitable alternative in such cases?

Regular expressions have limitations when it comes to parsing nested parentheses structures because they cannot handle arbitrary levels of nesting. In such cases, a Tokenizer would be a more suitable alternative as it can accurately tokenize the input string based on the rules of the nested structure, allowing for easier parsing and manipulation of the data.

<?php

class Tokenizer {
    public static function tokenizeNestedParentheses($input) {
        $tokens = [];
        $stack = [];
        
        for ($i = 0; $i < strlen($input); $i++) {
            if ($input[$i] == '(') {
                $stack[] = $i;
            } elseif ($input[$i] == ')') {
                $start = array_pop($stack);
                $tokens[] = substr($input, $start, $i - $start + 1);
            }
        }
        
        return $tokens;
    }
}

$input = "(a(b(c)d)e)";
$tokens = Tokenizer::tokenizeNestedParentheses($input);

print_r($tokens);

?>