|
|
|
|
<?php
$text = '</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open('http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153','
win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no'); return false;" title="Печать"></a>';
$text = preg_replace('#^' . preg_quote('\s+<a href=(.)*title="Печать"></a>'). '$#si',"",$text);
print $text;
?>
|
Нужно выбросить все ссылки, в которых встречается title="Печать", остальные - оставить. Перед каждой такой ссылкой каждый раз встречается куча пробелов. Их тоже надо выбросить.
У меня сейчас ошибка: Parse error: syntax error, unexpected T_STRING in Z:\home\avart.ua\www\preg.php on line 2
Это - сама текстовая строка. | |
|
|
|
|
|
|
|
для: Лена
(22.01.2009 в 17:44)
| | $text = '</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open('
http...
Ага? | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2009 в 18:06)
| | Ни ага. Но красные не сдаются :)
Пока не вырезается, но сейчас такой вариант:
<?php
$text = 'Мне нужно это выбросить</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open(' . addslashes("'http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153','
win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no'") . '; return false;" title="Печать"></a>';
$text = preg_replace('#^' . preg_quote('\s+<a href\s*=\s*"http\:\/\/[^"]+".*?title="Печать"></a>'). '$#si',"",$text);
print $text;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(22.01.2009 в 23:43)
| | потеряли одну скобку перед ; return false;" title="Печать"
и как-то странно у вас с preg_quote() .
Внутри preg_quote метасимволов шаблона быть не может. Они все будут заэкранированы.
Собственно, это основное назначение preg_quote(). | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2009 в 17:37)
| | >Они все будут заэкранированы.
и превратятся в обычные символы. От preg_quote() отказалась. А скобку добавила. Уже упростила паттерн проще некуда, и все равно не срабатывает.
<?php
$text = 'Мне нужно это выбросить</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open(' . addslashes("'http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153','
win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no'") . '); return false;" title="Печать"></a>';
$text = preg_replace('#^\s+<a href="[^"]+".*?title="Печать"></a>$#si',"",$text);
print $text;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(24.01.2009 в 00:21)
| | > addslashes
Это неправильно, так как Вам нужно правильно оформить литеральную константу (короче, строку в коде) именно «ручками», в редакторе. Можно открыть тот же Блокнот, скопировать туда текст, заменить «\» и «'» на «\\» и «\'» соответственно (именно в таком порядке).
А паттерн примерно такой:
<?php
$text = '</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open(\'http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153\',\'
win2\',\'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no\'); return false;" title="Печать"></a>';
$text = preg_replace('/<a[^>]+?title="Печать">.*?<\\/a>/is', '', $text);
?>
|
P.S. Есть форма записи строки, называемая nowdoc:
<?php
$text = <<<'TEXT'
</a> <a href="http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153"
target="_blank" onclick="window.open('http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153','
win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no'); return false;" title="Печать"></a>
TEXT;
?>
|
Вот туда действительно можете пихать любой текст, не содержащий «TEXT;» (Ваш идентификатор, не обязательно TEXT), без доп. обработки. | |
|
|
|
|
|
|
|
для: BinLaden
(24.01.2009 в 00:32)
| | В мануале отмечено, что nowdoc введен в PHP 5.3.0. У меня третий Денвер стоит, где версия PHP 5.2.4. Поэтому у меня появляется ошибка:
Parse error: syntax error, unexpected T_SL in Z:\home\avart.ua\www\preg_.php on line 2
Давно хотела спросить: а где можно посмотреть значения этих ошибок? Где тот список, где написано, что ошибка T_SL - это... ?
Если применить форму записи heredoc, то в строку придется добавить слэши перед ", так как heredoc - та же самая строка, только в двойных кавычках.
Тогда пример будет так выглядеть:
<?php
$text = <<<THANK_YOU_BINLADEN
</a> <a
href=\"http://www.budshop.com.ua/index2.php?option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153\"
target=\"_blank\" onclick=\"window.open('http://www.budshop.com.ua/index2.php?
option=com_content&task=view&id=3358&pop=1&page=0&Itemid=153','
win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,heig
ht=480,directories=no,location=no'); return false;\" title=\"Печать\"></a>
THANK_YOU_BINLADEN;
$text = preg_replace('/<a[^>]+?title="Печать">.*?<\/a>/is', '', $text);
?>
|
Вот это работает. Хотя толку от него столько же, как и в случае, если лепить слэши перед одинарными кавычками.
С addslashes не понятно. Какая разница, проставлю я эти слэши руками или за меня это сделает функция?
PS У вас в коде ошибка. Вот здесь:
$text = preg_replace('/<a[^>]+?title="Печать">.*?<\\/a>/is', '', $text);
Надо так(слэш один убрала):
$text = preg_replace('/<a[^>]+?title="Печать">.*?<\/a>/is', '', $text); | |
|
|
|
|
|
|
|
для: Лена
(24.01.2009 в 17:09)
| | > Где тот список, где написано, что ошибка T_SL - это... ?
Скорее всего это не ошибка, а какой-то token. Весь код состоит из этих token'ов и они могут следовать в определенном порядке. Если порядок нарушен, то появляется "syntax error, unexpected ...".
> Если применить форму записи heredoc, то в строку придется добавить слэши перед ", так как heredoc - та же самая строка, только в двойных кавычках.
Надо экранировать «\», «$».
> С addslashes не понятно. Какая разница, проставлю я эти слэши руками или за меня это сделает функция?
Вы ставите бекслеши («\») чтобы парсер PHP правильно интерпретировал строку. Попробуйте сформировать и вывести на экран строку «It's my "little" puppy» (тут и кавычки и апостроф) без heredoc/nowdoc двумя способами: с помощью ручного экранирования (самому добавить бекслеши) и попытаться это проделать с addslashes(). Думаю, Вы поймете о чём я говорю.
> У вас в коде ошибка. Вот здесь:
Я бы не назвал это ошибкой, я сознательно поставил 2. | |
|
|
|
|
 198.5 Кб |
|
|
для: BinLaden
(24.01.2009 в 17:31)
| | >Скорее всего это не ошибка, а какой-то token.
Вы правы. Нашла список этих token'ов. Прикрепила.
>Попробуйте сформировать и вывести на экран строку «It's my "little" puppy»
Пример-провокация. Да я даже строку для addslashes() не могу сформировать, так как все равно приходиться что-то(или ", или') экранировать руками. А потом, если применяешь addslashes() , то ерунда получается. Поняла.
>Я бы не назвал это ошибкой, я сознательно поставил 2.
Вот в этом не уверена, но мне кажется, что второй слэш, потому что в одинарных кавычках экранируется слэш. | |
|
|
|
|
|
|
|
для: Лена
(25.01.2009 в 19:07)
| | >>Я бы не назвал это ошибкой, я сознательно поставил 2.
>Вот в этом не уверена, но мне кажется, что второй слэш, потому что в одинарных кавычках экранируется слэш.
Вот именно потому, что один из слэшей уходит на экран другого, в шаблон отправится лишь один из них. И такая запись логически более корректна. | |
|
|
|
|