Для того чтобы вставить метку `#BANNER#` после каждых 10 символов в HTML-странице, не разрывая текст внутри тегов, нам нужно выполнить несколько шагов:
1. Пройтись по тексту, не затрагивая HTML-теги.
2. Считать символы и добавлять метку после каждых 10 символов.
3. Собрать результат.
Вот пример кода на PHP, который демонстрирует, как это можно сделать:
```php
function insertBannerAfterEveryNChars($html, $n = 10, $banner = '#BANNER#') {
// Регулярное выражение для поиска текста, игнорируя теги
$pattern = '/(<[^>]+>|[^<]+)|([^<]+)/';
preg_match_all($pattern, $html, $matches);
$result = '';
$charCount = 0;
foreach ($matches[0] as $match) {
if (isset($match[0]) && $match[0] === '<') {
// Если это тег, просто добавляем его в результат
$result .= $match;
} else {
// Если это текст, обрабатываем его
$text = $match;
$textLength = strlen($text);
while ($textLength > 0) {
$take = min($n, $textLength);
$result .= substr($text, 0, $take);
$text = substr($text, $take);
$textLength -= $take;
$charCount += $take;
if ($textLength > 0) {
// Вставляем метку, если есть ещё текст
$result .= $banner;
}
}
}
}
return $result;
}
// Пример использования
$htmlContent = '<div>Hello world! This is an example of #BANNER# HTML text.</div>';
$modifiedHtml = insertBannerAfterEveryNChars($htmlContent);
echo $modifiedHtml;
```
### Объяснение:
1. Мы используем регулярное выражение, чтобы разбить входной HTML-контент на массив, где каждый элемент — это или HTML-тег, или текст.
2. Для каждого текстового блока мы отслеживаем количество символов и, если достигнут предел `n` (в этом случае 10), добавляем метку `#BANNER#` после него.
3. Результаты собираются и возвращаются как новый HTML.
Такой подход позволяет предотвращать разрывы текста внутри тегов и корректно вставлять метку в нужных местах.