dzheka3d
@dzheka3d

Как заменить регулярым выражением текст вне тегов?

Полскажите пожалуйста как заменить текст через регулярное выражение так, чтобы в замене не учавствовали слова, которые находятся внутри тегов <h1>, <p>, <span>, <font>
Например вот такое регулярное выражение:
Вот что есть, не могу добавить исключение для слов, которые внутри тегов:
preg_replace("/(бетон[ирование|ировать]* фундамент[ов]*)/iu", "<a href="http://google.com/">\1</a>", "Как бетонировать фундамент <h1>Как бетонировать фундамент</h1>");
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Dante_FX
Путь к просветлению выглядит примерно так:
1) stackoverflow.com/questions/1732348/regex-match-op...
2) stackoverflow.com/questions/3577641/how-do-you-par...

P.S. Из личного опыта: simplehtmldom.sourceforge.net/manual.htm
Ответ написан
Комментировать
@Aricus
Если кто, как и я, наткнётся на этот вопрос в поиске, я решил эту проблему. Вот как я заменил дефисы на неразрывные дефисы
function processingText($text) {
	if (preg_match("/\<.*\>/u", $text)) {
		// До первого тега
		$text = preg_replace_callback("|^([^\<]*)\<|u", function ($matches) {
			return str_replace('-', '&#8209;', $matches[1]).'<';
		}, $text);
		// Основная часть
		$text = preg_replace_callback("|\>([^\<]*)\<|u", function ($matches) {
			return '>'.str_replace('-', '&#8209;', $matches[1]).'<';
		}, $text);
		// После последнего тега
		$text = preg_replace_callback("|\>([^\<]*)$|u", function ($matches) {
			return '>'.str_replace('-', '&#8209;', $matches[1]);
		}, $text);
		return $text;
	} else {
		// Замена в тексте без тегов
		return str_replace('-', '&#8209;', $text);
	}
}

Ограничение: предполагается, что '<' и '>' используются только в паре.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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