creativeworm
@creativeworm

Как заменить вхождения за исключением тегов?

Добрый день.
Помогите советом или примером пожалуйста.
Имеем такой HTML:
<body>
    <h1>Текст!</h1>
    <p><a href="#">текст ссылки</a></p>
    <table>
        <tr><td>Текст 1</td></tr>
        <tr><td>Текст 2</td></tr>
    </table>
</body>


Требуется произвести замену слова "текст" на другое, но при условии, что будут пропускаться вхождения внутри
table
и
a


Можно использовать preg_replace_callback или preg_replace, но как сделать, чтобы условие срабатывало при НЕсовпадении с регулярным выражением?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 3
iNickolay
@iNickolay
Регулярные выражения тебе в помощь :)
Ответ написан
В один проход вряд ли получится сделать - дополнительное условие
нужно сначала вычленить блоки в которых действительно нужно сделать замену и потом уже отдельно ее провести
реализация через регулярные выражения будет довольно сложной
Ответ написан
@OVK2015
Проверяйте. Вроде работает

$sourceStr = <<<EOD
	<body>
	<strong>Another text</strong>
    <h1>Text!</h1>
    <p><b>Bold text</b></p>
    <p><a href="#">text link</a></p>
    <table>
        <tr><td>Text 1</td></tr>
        <tr><td>Text 2</td></tr>
    </table>
</body>
EOD;

	$regExpWrapper = "#(?<=<)(?!td)(?!a)(?!tr)(?!th)(?!table)(?:.+?)>(.*?)(?:<)#si";
	preg_match_all($regExpWrapper, $sourceStr, $matches);
	print_r($matches);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы