§ Код

Иногда очень хочется получить парные теги с учетом вложенности, и данный код может в этом серьезно помочь:
1function get_pair_tag($q, $tag = 'table') {
2
3    $out = [];
4    if (preg_match_all('~</?'.$tag.'[^>]*>~is', $q, $cp, PREG_PATTERN_ORDER)) {
5
6        $otag = '';
7        $open = $start = $topen = 0;
8
9        foreach ($cp[0] as $x) {
10
11            $length = strlen($x);
12            $start  = strpos($q, $x, $start) + $length;
13
14            if ($x[1] == '/') {
15                $open--;
16                if ($open == 0) $out[] = [$otag, substr($q, $topen, $start - $topen - $length)];
17            } else {
18                if ($open == 0) { $topen = $start; $otag = $x; }
19                $open++;
20            }
21        }
22    }
23
24    return $out;
25}