Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 04:24 01.05.24 
Компютри и Интернет
   >> PHP
*Кратък преглед

Тема preg_replace проблем?...  
Автор Fallen_Angel (St.Lucifer)
Публикувано08.03.07 21:55



Пустите regexp са ми мътна и кървава Индия...

Ето проблема, моля, помогнете с решението, благодаря предварително:

Имам статия, дълга достатъчно, за да понесе повече от една снимка. При ъплоуда на статията съм качил заедно ИД-то на статията и снимките.

Сего идва интересното - искам да изкарам снимка вътре в тексто след 750-тия символ... и на следващите 750 - пак и така до изчерване или на символите, или на снимките...

Идеи?

Ето нещо, което ми казаха на мен: с preg_replace() се решавал проблема, ама аз както я ползвам или изтрива 750-те символа, или не прави нищо...



$ext=array(1 => "jpg", 2 => "gif", 3 => "jpeg", 4 => "png");

$morepicz=array();

for($z==1;$z<=6;$z=$z+1){

foreach ($ext as $value) {
$morepicz[$z]='i/th/th_'.$sid.'-'.$z.'.'.$value;

if(file_exists($morepicz[$z])) {
$div="<a href=\"$morepicz[$z]\" target=\"_blank\">
<img src=\"$morepicz[$z]\" border=\"0\" hspace=\"3\" vspace=\"3\" alt=\"$title\"></a>";
}
}
}

$prob=$statiata; // $statiata e texta ot MySQL-a

$prob=preg_replace("/^(.{750})/",$div,$prob);


Резултатът:

В долната част и оригиналната статия... Забележете как снимката е различна, но пък е "изяла" текста...




Тема Re: preg_replace проблем?...нови [re: Fallen_Angel]  
Автор Fallen_Angel (St.Lucifer)
Публикувано09.03.07 12:10



Май не съм формулирал въпроса много правилно...

Точния ми проблем е следния:

Как с preg_replace да хвана първи празен символ след, да речем, 2000 символа от началото на текста?




Тема Re: preg_replace проблем?...нови [re: Fallen_Angel]  
Автор vido (новак)
Публикувано09.03.07 15:46



Разбира се че изтрива 750-те символа. функцията preg_replace прави точно това. Виж preg_match.
регулярния израз е: .{2000}\S*\s
^ се използва за начало на ред. Дали е неоходим в началото зависи от алгоритъма ти.

По принцип не ти препоръчвам използването на RE в този случай.
По- бързо ще работи с цикъл за символите след 2000, докато срешнеш интервал или нещо подобно. Пък и ще ти е по- лесно.



Тема Re: preg_replace проблем?...нови [re: Fallen_Angel]  
Автор ro6aviaМодератор (усер френдли)
Публикувано09.03.07 16:10



В отговор на:


Ето нещо, което ми казаха на мен: с preg_replace() се решавал проблема

Аз пък ти казвам че не е добре да е preg_replace().
Лично аз бих го направил с цикъл по текста, търсене на интервал след определения символ и слагане на снимката там със str_pos(), substr() и другите функции за работа със стрингове.

С preg_replace ще е лесно ако беше ЕДНА снимка, а при теб са повече ;-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy

Тема Re: preg_replace проблем?...нови [re: vido]  
Автор Fallen_Angel (St.Lucifer)
Публикувано09.03.07 16:13



Значи, съвсем целенасочено искам да употребя preg_replce... Искам да хвана първия празен символ след 2000 символа и този празен символ да го презапиша с някакъв стринг...




Тема Re: preg_replace проблем?...нови [re: Fallen_Angel]  
Автор vido (новак)
Публикувано09.03.07 17:34



Щом толкова държиш, принципно е:

preg_replace("/(^.{2000}\S*)(\s)(.*$)/", "\{1}$div\3", $prob);

Това е за една снимка. Може да се направи и за много, ама понапъни се малко и ти.



пп: Не съм го тествал

Редактирано от vido на 09.03.07 17:36.



Тема Re: preg_replace проблем?...нови [re: vido]  
Автор vido (новак)
Публикувано09.03.07 17:46



Не съм сигурен дали е коректно:

"\{1}$div\3"

за това за по- сигурно: '${1}' . $div . '$3',

Редактирано от vido на 09.03.07 17:49.



Тема Re: preg_replace проблем?...нови [re: vido]  
Автор Fallen_Angel (St.Lucifer)
Публикувано12.03.07 10:12



Супер стана! Много благодаря, ето и целия код:


$ext=array(1 => "jpg", 2 => "gif", 3 => "jpeg", 4 => "png");

$morepicz=array();

for($z==0;$z<=5;$z=$z+1){

foreach ($ext as $value) {
$morepicz[$z]='i/th/th_'.$sid.'-'.$z.'.'.$value;
if(file_exists($morepicz[$z])) {
$align="left";
if($z==2 || $z==4 || $z==6) $align="right";
$div[$z]="<a href=\"$morepicz[$z]\" target=\"_blank\"><img src=\"$morepicz[$z]\" border=\"0\" hspace=\"3\"
vspace=\"3\" alt=\"$title\" style=\" float: $align; padding: 2 2 2 2; border: 1px solid #F00000\"></a>";
$offset=$z*2000;
}
}
$statiata=preg_replace("/(^.{".(($z*2000)-2000)."}\S*)(\s)(.*$)/", "\\1 $div[$z]\\3", $statiata);
}


С един FOR търся дали има такъв файл и после с маркера $z от този цикъл отмествам $offset с по 2000 символа...

Ето и




Тема Защо preg_replace тогава?...нови [re: Fallen_Angel]  
Автор ro6aviaМодератор (усер френдли)
Публикувано16.03.07 11:34



preg_replace ти дава възможност да го направиш НАВЕДНЪЖ.
А и както е добре описано str_replace работи много по-бързо и по-добре когато става дума за еденична подмяна както правиш ти !

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy



*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.