Forum Webscript.Ru
Программирование => PHP => Тема начата: Босc всех зон от 22 Марта 2004, 18:40:21
-
Нужно вырезать HTML коментарии.
Проблема в конструкции , где их вырезать не нужно.
Это Синтаксис регулярных выражений (http://ua.php.net/manual/ru/pcre.pattern.syntax.php) читал вдумчиво 3 раза :)
Шаманил с "Утверждениями" $text = preg_replace("/(?!<\\/script>)/imsU", "", $text);
но нормального результата так и не добился.
Сейчас сделал через preg_replace_callback (http://ua.php.net/manual/ru/function.preg-replace-callback.php) хотя думаю можно сделать одним регом, подскажите :)
-
Босc всех зон:
но нормального результата так и не добился.
ты бы хоть рассказал что там неправильно работало (а то тестировать код все-равно никто не будет).
Попробуй такой регексп:
\\s*(?!<\\/script>)/imsU
(не уверен что модификатор m здесь нужен)
-
пробел между > и ) вставляет форум. Его (пробела) там быть не должно
-
Да, пробел и я не вставлял. И кстати слеш перед перед /script> тоже стоял, может форум проглотил.
Действительно модификатор m не нужен.
Если просто описать задачу не привязываясь к данному конкретному случаю, то нужно заменить часть текста, после которой не идёт определённая последовотельность символов.
Хочется знать для общего развития как это можно сделать одним регом. А не несколькими или callback\'ом
Тесты:
$text = "
other html content
";
echo preg_replace("/\\\\s*(?!<\\\\/script>)/isU", "", $text);
Результат:
other html content
-
Босc всех зон:
после которой не идёт определённая последовотельность символов
Макс:
(?!определенная_последовательность)
-
Хм, наверное я где-то ошибаюсь но цитата из мана:
... Утверждения касательно последующего текста начинаются с (?= для положительных утверждений и с (?! для отрицающих утверждений. Например, \\w+(?=;) совпадает со словом, за которым следует символ \';\', но при этом сама точка с запятой в совпадение не включается. А foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". ...
Проблему решил так:
$text = preg_replace("/(