Очевидно, вам нужно проанализировать то, что не включает в себя область, которую вы хотите оставить как есть. Итак, вот один из способов сделать это:
Для каждого [html]
блока генерируйте уникальный идентификатор (например, через uniqid
или что-то хэширующее, возможно, содержимое блока). Убедитесь, что этот идентификатор (который должен быть чем-то, что , а не зависит от вашего другого анализа, так что alphanum будет хорошим выбором) на самом деле не существует в тексте. Если это так, сгенерируйте другое.
Сохранить идентификатор и содержимое соответствующего блока [html]
в массиве, используя идентификатор в качестве ключа. Затем замените подстроку [html]blah[/html]
на [html]identifier[/html]
в вашем вводе.
Продолжите синтаксический анализ, как обычно, и когда вы закончите, замените [html]identifier[/html]
биты реальным контентом. Это можно сделать всего одним вызовом preg_replace
для всех блоков, если вы используете опцию /e
(оценивать замену строки как код).