|
|
|
| помогите люди добрые.
мне нужно удалять пункт целиком, если в нем есть заданная фраза,
ну типа саму фразу и еще, все то что, находится до тегов <li> и </li> с обеих сторон, ну и их тоже к черту.
PS. а с выражениями, вообще не алё.
$trashString = "ненужная фраза";
$string = "
<ul>
/////////////////////////////////// удалить по <li
<li class="red">
<span>[url]ненужная фраза[/url]</span>
</li>
////////////////////////////////// удалить по </li>
<li class="red">
<span>фраза</span>
</li>
</ul>
";
спасибо | |
|
|
|
|
|
|
|
для: danila_dem
(19.08.2008 в 01:04)
| | Здравствуйте!
<?php
$trashString = "ненужная фраза";
$string = '';
$list =
"<ul>
<li class=\"red\">
<span>[url]ненужная фраза[/url]</span>
</li>
<li class=\"red\">
<span>фраза</span>
</li>
</ul>";
$search =
"/<li class=\"red\"\>
<span\>\[url\](.*?)<\/span\>
<\/li\>/i";
$list = preg_replace($search, $string, $list);
echo $list;
?>
|
| |
|
|
|
|
|
|
|
для: dream-x
(19.08.2008 в 01:26)
| | я прошу прощения наверное плохо растолковал что мне нужно,
дело в том что данные в переменной со списками могут быть разные(разные стили, ссылки и пр. class="red" это я на шару, для примера) поэтому мне нужно как то перемещаться, что ли по строке от "ненужной фразы" до тега <li назад, и от "ненужной фразы" до тега </li> вперед.
вот еще пример как я вижу примерно.
<? php
$string = "<ul><li><span>unnecessary phrase</span></li><li>phrase</li><ul>"; //эта переменная генерится хрензнаетгде и может быть разная.
$start = "unnecessary phrase";
$toBackStop = "<li";
$toForvardStop = "</li>";
$pattern = "??$toBackStop????????????$start????????????$toForvardStop??";
$out = preg_replace($pattern, "", $string);
print = $out;
//result : <ul><li>phrase</li><ul> ?>
|
спасибо большое за внимание. | |
|
|
|
|
|
|
|
для: danila_dem
(19.08.2008 в 02:27)
| |
<pre><?
$start = "unnecessary phrase";
$string = 'Если не использовать $toBackStop, $toForvardStop
и предпологать что в строке $start не содержится спец.символов или они заэкранированы например при помощи preg_quote()
<ul><li><span>unnecessary phrase</span></li>
<li>necessary phrase</li>
<li>phrase</li><ul>';
# можно было.бы попробовать примерно так:
$pattern = '#<li(?:(?!</li>|' . $start . ').)*' . $start . '(?:(?!</li>).[^<]*)*</li>#s';
$out = preg_replace($pattern, "", $string);
print htmlspecialchars($out);
# или
?><hr/><?
$pattern = '#<li(?:(?!</li>).)*?' . $start . '(?:(?!</li>).[^<]*)*</li>#s';
$out = preg_replace($pattern, "", $string);
print htmlspecialchars($out);
# или
?><hr/><?
$pattern = '#<li[^>]*>(?:(?!</li>).)*?' . $start . '.*?</li>#s';
$out = preg_replace($pattern, "", $string);
print htmlspecialchars($out);
?></pre>
но в любом случае , получатся медленные выражения
|
| |
|
|
|
|
|
|
|
для: xx77
(19.08.2008 в 18:38)
| | спасибо, все работает
только я не понял что значит медленные, точнее насколько медленные, меня на хосте не забанят, если на странице 20 таких обрезаний сделать? | |
|
|
|
|
|
|
|
для: danila_dem
(20.08.2008 в 15:23)
| | Думаю не забанят , или забанят но не за это .)
"медленные" это я так про то что постарался-бы не применять такие долго-работающие выражения например в скрипте который был-бы постоянно-работающим на страницах сайта .
Если только для однократных применений , например просто для правки статических или подобных таковым файлов.
Может немного передёргиваю, но для меня генерация за 0,09 секунды обычной страницы сайта кажется слишком медленной , если только это не страница которую сам разработчик разработал для одного себя .)
А так за мной никакого совсем опыта работы с большими обьёмами данных , например работы с таблицами базы данных объёмом как на этом форуме, иногда только сграбливаю почитать учебники или справочники функций :) для личной коллекции и общего развития лично меня | |
|
|
|