Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Зачистка тегов регами


Автор: PROme 15.8.2005, 16:14
блин, что-то я зациклился
помогите, плиз, нужно удалить открывающий и закрывающий тэг script со всеми их вариациями (проще говоря, типа <.*?script.*?> и <.*?\/.*?script.*?>... насколько я понимаю)
что-то никак толком не удается реализовать, плиз хелп smile

Автор: Mal Hack 15.8.2005, 16:30
Код

$str = <<<EOF
    <script>sdkfj</script>
    <scriptdsf4>sdkfj</script>
    <script sdf>sdkfj</script>
    <script>sdkfj</script>


EOF;
 print preg_replace( "#</?script.*?>#i" , "" , $str );

?>

Автор: PROme 15.8.2005, 16:52
блин, сорри, сам дурак! smile
забыл дописать - тэги удалить не проблема
нужно и их и все, что между ними удалить

Автор: Bikutoru 15.8.2005, 17:07
Код

$string = <<<DATA
435dt ret
<script>df</script>
435
<script n='d'>gfhgfhfghg</script>
 tr rt
DATA;

print preg_replace("#<script(?:\s.*)?>.*</SCRIPT>#is", "", $string);

Автор: Mal Hack 15.8.2005, 17:18
Bikutoru
а зачем скобки?
И потом. У тебя заменит от первого до последнего, что не есть хорошо.
Вот так было бы более правильно:
Код

 print preg_replace( "#<script.*?>.*?</script>#is" , "" , $str );

Автор: Bikutoru 15.8.2005, 17:35
Mal Hack, помнится, какое-то время назад была тема в которой я долго и упорно придумывал выражения вида
Код

<script-gadost-raznaya>...</script>

которые подходили под твои реги, и вот опять smile
Вот это
Код

<script.*?>

спокойно пропускает <script-gadost-raznaya>, а вот это
Код

<script(?:\s.*)?>

только <script> и <script gadost-raznaya>(c пробелом после <script)
(?: я использовал, т.к. запоминать это выражение совсем не надо.
Ключ s обязателен, иначе
Код

<script>
Что-то
</script> - на другой строчке

не будет заменено!

Цитата
У тебя заменит от первого до последнего

Ты иеешь в виду, что у меня заменится все от первого совпадения с <script> до последнего совпадения с </script>? Ничего подобного, посмотри мой пример - все нормально работает. Кстати, протестировал твой вариант, разницы с жадностью .*? я не заметил. Работает аналогично.

Автор: Mal Hack 15.8.2005, 17:51
Код

<?php

$str = <<<EOF
    <script>sdkfj</script>
    <scriptdsf4>sdkfj</script> sdf
    <script sdf>sdkfj</script>     sdf
    <script>sdkfj</script>


EOF;
 print preg_replace( "#<script\s.*?>.*?</script>#is" , "" , $str );

?>

Теперь попробуй как бы по своему:
Код

<?php

$str = <<<EOF
    <script>sdkfj</script>
    <scriptdsf4>sdkfj</script> sdf
    <script sdf>sdkfj</script>     sdf
    <script>sdkfj</script>


EOF;
 print preg_replace( "#<script\s.*?>.*</script>#is" , "" , $str );

?>

Автор: Bikutoru 15.8.2005, 18:06
Ну да... поймал smile. А если так
Код

$str = <<<EOF
1    <script>sdkfj</script>
2    <scriptdsf4>sdkfj</script>2
r    <script sdf>sdkfj</script>3
    <script>sdkfj</script>45
    <script>
     tytyt
     tyty
    </script>34

6
EOF;
 print preg_replace( "#<script(?:\s.*)?>.*</script>#isU" , "" , $str );

?

Автор: Mal Hack 15.8.2005, 18:29
? равносильно U smile
Так правильно smile

Автор: PROme 16.8.2005, 01:33
большое спасибо за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)