[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярное выражение
Invis1ble
Делаю вывод результатов поиска.

Есть $long_string вида
$long_string="
<li>
<a href=http://localhost/topics_list.php?PHPSESSID=
$SID&pn=$pn target=_blank>
$topic_name
</a>
<br>

$match_string
<font color=blue>
<i> - в названии темы</i>
</font>"
;


$match_string - найденный текст, в котором надо "вырезать" слишком длинные фрагменты (в которых нет искомого выражения)

Я делаю это так:

$long_string_pattern=array(
"/(r>)[^<>]*( [^<> ]*[^<>]{20}<b)/",
"/(b>[^<>]{20}[^<> ]* )[^<>]*( [^<> ]*[^<>]{20}<b)/",
"/(b>[^<>]{20}[^<> ]* )[^<>]*(<f)/"
);
$replace="\\1...\\2";

$cut_string=preg_replace($long_string_pattern,$replace,$long_string);


По-моему данный шаблон - извращение... Как сделать его более "вменяемым"?

P.S. Кстати пробовал заменять например [^<>]* на .*? - но так почему-то не работает huh.gif . Кто знает, почему?



Спустя 10 часов, 9 минут, 37 секунд (30.07.2010 - 11:28) DedMorozzz написал(а):
напиши внятно, что хочешь получить. Желательно примером. Ибо что такое длиные выражения не ясно.

Спустя 8 часов, 46 минут, 35 секунд (30.07.2010 - 20:15) Invis1ble написал(а):
ну вот возможные варианты строки $match_string, которую надо обработать:

1 вариант:
это искомая строка этот фрагмент надо вывести очень длинный фрагмент текста, который не надо выводить

2 вариант:
очень длинный фрагмент текста, который не надо выводить этот фрагмент надо вывести это искомая строка этот фрагмент надо вывести очень длинный фрагмент текста, который не надо выводить

3 вариант:
очень длинный фрагмент текста, который не надо выводить а этот фрагмент надо вывести а это искомая строка

Да, кстати.. чуть не забыл..
4 вариант - комбинация вариантов 1-3, например:
это искомая строка этот фрагмент надо вывести очень длинный фрагмент текста, который не надо выводить этот фрагмент надо вывести это искомая строка этот фрагмент надо вывести очень длинный фрагмент текста, который не надо выводить а этот фрагмент надо вывести а это искомая строка

Вот что я хочу из этого получить:

1 вариант:
это искомая строка этот фрагмент надо вывести ...

2 вариант:
... этот фрагмент надо вывести это искомая строка этот фрагмент надо вывести ...

3 вариант:
... а этот фрагмент надо вывести а это искомая строка

и 4 вариант:
это искомая строка этот фрагмент надо вывести ... этот фрагмент надо вывести это искомая строка этот фрагмент надо вывести ... а этот фрагмент надо вывести а это искомая строка

При этом длина фрагмента, который надо вывести рассчитывается так:
не меньше 20 символов, но чтобы фраза не "обрубалась" на полуслове (к примеру, вместо: чтобы фраза не "обру ... надо так: чтобы фраза не "обрубалась" ...)

Спустя 15 часов, 42 минуты, 53 секунды (31.07.2010 - 11:58) Invis1ble написал(а):
Чтоб окончательно разъяснить ситуацию, пример:

$match_string="<b>нужный_текст</b> нужный_текст ненужный_текст нужный_текст <b>нужный_текст</b> нужный_текст ненужный_текст нужный_текст <b>нужный_текст</b>";

Спустя 16 минут, 44 секунды (31.07.2010 - 12:14) DedMorozzz написал(а):
указываешь 20 любых символов, по типу #.{20}# ну иль сока тебе надо. Далее любые символы до пробела #.*? #. Остальное вырезаешь.
$a=preg_replace('#(.{2}.*?) .*#,'$1',$a);

Так же можно не только пробел, а перенос строки ну и так далее...

Спустя 9 часов, 37 минут, 35 секунд (31.07.2010 - 21:52) Invis1ble написал(а):
Цитата (DedMorozzz @ 31.07.2010 - 09:14)
указываешь 20 любых символов, по типу #.{20}# ну иль сока тебе надо. Далее любые символы до пробела #.*? #. Остальное вырезаешь.
<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$a</span><span class="sh_symbol">=</span><span class="sh_function">preg_replace</span><span class="sh_symbol">(</span><span class="sh_string">'#(.{2}.*?) .*#,'',$a);</span></pre>
Так же можно не только пробел, а перенос строки ну и так далее...

Так в том то и дело, что пробовал я так (в первом посте писал)

      $p=array(
"/(r>).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?(<f)/"
);


но не работает... sad.gif

Спустя 10 часов, 39 минут, 45 секунд (1.08.2010 - 08:32) DedMorozzz написал(а):
Да ты что издеваешься?
$a=preg_replace('#(.{2}.*?) .*#,'$1',$a); != $p=array(
"/(r>).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?(<f)/"
);

Давай ЖИВОЙ пример - покажи результат на нём.

Спустя 51 минута, 59 секунд (1.08.2010 - 09:24) Invis1ble написал(а):
DedMorozzz не серчай, пытаюсь описывать как могу. Я дал пример максимально приближенный к реальному. Что ты имеешь ввиду под словом "ЖИВОЙ"? Можешь поконкретней, а то я въехать не могу.

Спустя 22 минуты, 50 секунд (1.08.2010 - 09:47) Invis1ble написал(а):
По поводу

Цитата
$a=preg_replace('#(.{2}.*?) .*#,'$1',$a); != $p=array(
"/(r>).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?(<f)/"
);



да, не одно и то же. Но по сути у меня может быть 3 вида обрабатываемой строки, поэтому я и делаю массив с 3-мя шаблонами (не писать же 3 раза preg_replace?), а шаблон который предлагаешь ты как раз и соответствует в данном конкретном случае одному из трех элементов массива

#(.{20}.*?) .*# соотв. /(b>.{20}.*? ).*?(<f)/

или я что-то неправильно понял?

Спустя 9 минут, 4 секунды (1.08.2010 - 09:56) DedMorozzz написал(а):
условия пишутся вот так вот : (условие1)|(условие2)|(условие3)
живой пример - это тот участок который ты и обрабатываешь, без условный обозначений, а именно тот на котором ты проверяешь. Естесно всю портянку кода не надо, а лишь проверяемый участок кода.

Спустя 6 минут, 20 секунд (1.08.2010 - 10:02) Invis1ble написал(а):
$p=array(
"/(r>).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?(<f)/"
);
$r="\\1...\\2";
foreach ($ap1 as $k=>$v) $ap[$k]=preg_replace($p,$r,$v);

этот пост я случайно отправил, см. ниже

Спустя 9 минут, 58 секунд (1.08.2010 - 10:12) Invis1ble написал(а):
Хорошо, только у меня там понамудрено сильно, не знаю поймешь ли:


$ap[$key]="
<li>
<a href=http://localhost/posts_list.php?PHPSESSID=
$SID&tid={$r['tid']}&pn=$pn target=_blank>
{$r1['name']}
</a>
<br>

$mdbs
<font color=blue><i> - в комментарии</i></font>";

krsort($ap);

$n=0;
foreach ($ap as $k=>$v)
{
$ap1[$n]=$v;
$n++;
}

unset($ap);

$p=array(
"/(r>).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?( .*?.{20}<b)/",
"/(b>.{20}.*? ).*?(<f)/"
);
$r="\\1...\\2";
foreach ($ap1 as $k=>$v) $ap[$k]=preg_replace($p,$r,$v);


$mdbs - это строка текста, извлеченная из БД, в которой выделены искомые слова тегами <b></b> (слова, которые в поисковике набирались)

Спустя 13 часов, 58 минут, 18 секунд (2.08.2010 - 00:10) Invis1ble написал(а):
DedMorozzz

Цитата
условия пишутся вот так вот : (условие1)|(условие2)|(условие3)


сделал как ты сказал, все равно не получается

$p="/((r>).*?( .*?.{20}<b))|((b>.{20}.*? ).*?( .*?.{20}<b))|((b>.{20}.*? ).*?(<f))/";


Спустя 9 часов, 46 минут, 52 секунды (2.08.2010 - 09:57) DedMorozzz написал(а):
Чуть позже напишу ответ. Сейчас чуть занят. Ориентировочно в обед...

Спустя 2 часа, 56 минут, 45 секунд (2.08.2010 - 12:54) DedMorozzz написал(а):
$a='<li>
<a href=http://localhost/posts_list.php?PHPSESSID=$SID&tid={$r[
\'tid\']}&pn=$pn target=_blank>
{$r1[
\'name\']}
</a>
<br>
<b>My find text.</b><f>adsada
<font color=blue><i> - в комментарии</i></font>'
;
$a=preg_replace('#b>(.{4}.*?) .*?<f#us','$1',$a);
echo htmlspecialchars($a);

Спустя 6 часов, 45 минут, 16 секунд (2.08.2010 - 19:39) Invis1ble написал(а):
DedMorozzz
Цитата
<b>My find text.</b><f>adsada
<font color=blue><i> - в комментарии</i></font>';
$a=preg_replace('#b>(.{4}.*?) .*?<f#us','$1',$a);

да ты меня не понял по-ходу. У меня в поисковике вводится слово "ванга" например. Сканируется БД в поиске этого слова и в результате формируется

$mdbs="Но не каждому <b>Ванга</b> говорила предсказания, многих людей она просто выгоняла. Так, к ней пришла женщина, спрашивающая, как ей жить после смерти сестры, ведь она потратила все средства на ее лечение. Однако <b>Ванга</b> выгнала ее со словами, что та женщина ни разу не пришла навестить больную сестру, никак ей не помогала, а теперь хочет найти деньги, припрятанные сестрой. И где деньги лежат, <b>Ванга</b> ей тоже не скажет.

Или одному молодому человеку она отказалась назвать имя убийцы его брата, у которого осталось трое детей-сирот и больная жена.";

после чего

$ap[$key]="
<li>
<a href=http://localhost/posts_list.php?PHPSESSID=$SID&tid={$r['tid']}&pn=$pn target=_blank>
{$r1['name']}
</a>
<br>
$mdbs
<font color=blue><i> - в комментарии</i></font>";

Вот из этого мне надо получить такую строку:

<li>
<a href=http://localhost/posts_list.php?PHPSESSID=$SID&tid={$r['tid']}&pn=$pn target=_blank>
{$r1['name']}
</a>
<br>... Но не каждому <b>Ванга</b> говорила предсказания, ... на ее лечение. Однако <b>Ванга</b> выгнала ее со словами, ... И где деньги лежат, <b>Ванга</b> ей тоже не скажет. Или ... детей-сирот и больная жена. <b>Ванга</b> взяла с него обещание, ...<font color=blue><i> - в комментарии</i></font>

Спустя 15 минут, 46 секунд (2.08.2010 - 19:55) Invis1ble написал(а):
DedMorozzz ты меня извини конечно, может я совсем тупой unsure.gif , ноя никак не могу догнать, как твой шаблон '#b>(.{4}.*?) .*?<f#us' подходит под мою задачу?

Спустя 6 минут, 41 секунда (2.08.2010 - 20:02) DedMorozzz написал(а):
мой шаблон был "(.{4}.*?) .*?", но в одном из постов ты указал ограничения. Тег Б и тег Ф. Вот я и подстроил.
И дай КОНКРЕТНЫЙ(!) пример. Без единой переменной. Получи результат и браузер - ПКМ->просмотреть исходный код страницы. И дай нужный участок. Я тебе уже и так всё написал. В общем дай код который надо обрабатывать, Без переменных.

Спустя 2 часа, 51 минута, 35 секунд (2.08.2010 - 22:53) Invis1ble написал(а):
Блин куда уже конкретней, какая разница с переменными или без? Вобщем смотри:

        <li>
<a
href=http://localhost/posts_list.php?PHPSESSID=75665c3d9e8b1261f3fae0b29d4212f6&tid=6&pn=1 target=_blank>
Предсказания Ванги
</a>
<br>

Но не каждому <b>Ванга</b> говорила предсказания, многих людей она просто выгоняла. Так, к ней пришла женщина, спрашивающая, как ей жить после смерти сестры, ведь она потратила все средства на ее лечение. Однако <b>Ванга</b> выгнала ее со словами, что та женщина ни разу не пришла навестить больную сестру, никак ей не помогала, а теперь хочет найти деньги, припрятанные сестрой. И где деньги лежат, <b>Ванга</b> ей тоже не скажет.

Или одному молодому человеку она отказалась назвать имя убийцы его брата, у которого осталось трое детей-сирот и больная жена. <b>Ванга</b> взяла с него обещание, что он не будет мстить убийце, потому что и так станет свидетелем его конца. Кстати, этот пришедший к Ванге молодой человек впоследствии стал ее мужем. В самую первую встречу пророчица сказала ему об этом, но парень ей не поверил, не желая связывать свою жизнь со слепой. Но потом Димитр стал все чаще приходить к Ванге, полюбил ее. Своих детей у них не было, и они взяли приемных мальчика и девочку.
<font color=blue><i> - в комментарии</i></font>


это без "обрезки"

Спустя 11 часов, 26 минут, 11 секунд (3.08.2010 - 10:19) DedMorozzz написал(а):
Ты веть пост дополнил 1й. Когда я читал там не было "продолжения"
А насчёт твоей задачи: вот ТЕПЕРЬ понятно, что ты хочешь получить. Чуть позже напишу.

Спустя 14 часов, 57 минут, 38 секунд (4.08.2010 - 01:17) Invis1ble написал(а):
Народ, а что, кроме как у Деда Мороза, ни у кого никаких мыслей по сабжу?
Высказывайте свои предложения, господа...

Спустя 7 часов, 23 минуты, 52 секунды (4.08.2010 - 08:41) netruxa написал(а):
ну я думаю одними регулярками тут проблему не решишь. Я бы брал 20 символов до <b> и 20 символов после </b> и от это позиции искал ближайший конец слова. Т.е. если короткие слова, то как раз получится 3 слова, если длинные, то 2
Цитата
... Но не каждому <b>Ванга</b> говорила предсказания, ...

Спустя 16 минут, 57 секунд (4.08.2010 - 08:58) DedMorozzz написал(а):
решить. ф-я preg_replace_callback. Я чёт всё никак не доберусь. Вчера занят был оч. А вечерком бурю в стакане Айс поднял (:

Спустя 51 минута, 32 секунды (4.08.2010 - 09:49) Invis1ble написал(а):
netruxa регулярками решить, и я уже решил (см. первый пост), проблема лишь в том, как сделать шаблон красивее.
Кстати, со времени создания топика я немного подправил код, хотя суть не изменилась:
      $unsorted_search_results[$key]="
<li>
<a href=http://localhost/posts_list.php?PHPSESSID=
$SID&tid={$r['tid']}&pn=$pn target=_blank>
{$r1['name']}
</a>
<br>

$mdbs
<font color=blue><i> - в комментарии</i></font>";

krsort($unsorted_search_results); // сортировка результатов согласно количеству совпадений

// ЗАМЕНА КЛЮЧЕЙ СТАНДАРТНЫМИ

$default_key=0;
foreach ($unsorted_search_results as $string)
{
$sorted_search_results[$default_key]=$string;
$default_key++;
}

// "ОБРЕЗКА" НАЙДЕННЫХ СТРОК
$patterns=array
(
"#(<br>)[^<>]*( [^<> ]*[^<>]{20}<b>)#",
"#(</b>[^<>]{20}[^<> ]* )[^<>]*( [^<> ]*[^<>]{20}<b>)#",
"#(</b>[^<>]{20}[^<> ]* )[^<>]*(<font color=blue>)#"
);
$replacement="\\1...\\2";
$search_results=preg_replace($patterns,$replacement,$sorted_search_results);

Т.е. (если не считать замену имен переменных на более информативные) я сделал следующее:
1. В шаблоне заменил "куски" тегов-"ограничителей" на "полные" теги, т.к. в $mdbs могут быть подобные конструкции, а тегов там быть не должно.
2. Убрал в последней строке кода foreach, т.к. он там совершенно не нужен (до этого я не знал, что preg_replace работает и с массивами в том числе).

DedMorozzz, а зачем preg_replace_callback? Какой код ты там хочешь вставить?
ИМХО можно вполне обойтись preg_replace, только я никак не могу понять почему там не срабатывают "таблетки от жадности"

Спустя 5 минут, 4 секунды (4.08.2010 - 09:54) DedMorozzz написал(а):
Зачек ф-я обраного вызова? Всё просто. Смотри каков алгоритм: находишь нужное слово. от него оставляешь 20 символов, если далее не идёт ключевое слово. Хот я можно сделать и просто реплейсом, но регулярка будет более медленная.
Смотри пример http://phpforum.ru/index.php?showtopic=31720&st=15&hl=

Спустя 10 минут, 21 секунда (4.08.2010 - 10:05) Invis1ble написал(а):
Да, да... я уже не раз встречал инфу, что регулярки иногда сильно тормозят и вобще могут подвесить сервер...
И тем не менее, все же интересно, почему не работает .*?-вариант в моем случае...

Спустя 6 минут, 37 секунд (4.08.2010 - 10:11) DedMorozzz написал(а):
Не регулярки медленно работают, а не правильно написанные и не оптимизированые медленно работает. И то и то решение было через регулярные выражение. Только одно было быстрее, более чем в 700 раз.

Спустя 30 минут, 29 секунд (4.08.2010 - 10:42) Invis1ble написал(а):
DedMorozzz ясно. Вобщем жду твоего варианта решения... По ходу вся надежда только на тебя, ибо число просмотров уже за две сотни перевалило, а народ почему-то стесняется писать. Пока только netruxa высказал свое предложение...

Спустя 8 минут, 5 секунд (4.08.2010 - 10:50) DedMorozzz написал(а):
Прямо сейчас не могу. Могу подтолкнуть быстро, а сидеть и разбирать прмиер - нету времени. Как освобожусь

Спустя 4 минуты, 28 секунд (4.08.2010 - 10:54) Invis1ble написал(а):
ОК. Сделай, как будешь не занят

Спустя 2 дня, 1 час, 35 минут, 44 секунды (6.08.2010 - 12:30) DedMorozzz написал(а):
Чесно гря тока вспомнил+чуток освободился)
Понимая смысл задачи не ясен путь решения. Вот предлагаемый вариант:
$zzz='Ванга';
$a='Но не каждому <b>Ванга</b> говорила предсказания, многих людей она просто выгоняла. Так, к ней пришла женщина, спрашивающая, как ей жить после смерти сестры, ведь она потратила все средства на ее лечение. Однако <b>Ванга</b> выгнала ее со словами, что та женщина ни разу не пришла навестить больную сестру, никак ей не помогала, а теперь хочет найти деньги, припрятанные сестрой. И где деньги лежат, <b>Ванга</b> ей тоже не скажет.
Или одному молодому человеку она отказалась назвать имя убийцы его брата, у которого осталось трое детей-сирот и больная жена. <b>Ванга</b> взяла с него обещание, что он не будет мстить убийце, потому что и так станет свидетелем его конца. Кстати, этот пришедший к Ванге молодой человек впоследствии стал ее мужем. В самую первую встречу пророчица сказала ему об этом, но парень ей не поверил, не желая связывать свою жизнь со слепой. Но потом Димитр стал все чаще приходить к Ванге, полюбил ее. Своих детей у них не было, и они взяли приемных мальчика и девочку.'
;
$arr=explode("<b>$zzz</b>",$a);
for($i=0;$i<sizeof($arr);$i++){
$arr[$i]=preg_replace('#(.{20}.*?) .*#','$1',$arr[$i]);
}
print_r($arr);
Где $zzz = вводимое слово. Так же, для "правильности" будет более верно рассматривать окончания. Т.е. что бы "ключевым" словом было и Ванга и Вангу и Вангой

Спустя 10 часов, 21 минута, 53 секунды (6.08.2010 - 22:52) Invis1ble написал(а):
DedMorozzz насчет окончаний это понятно... Однако судя по твоему ответу ты уже забыл поставленную задачу, т.к. твой скрипт ни коим образом её не решает sad.gif

Спустя 4 месяца, 2 дня, 21 час, 50 минут, 10 секунд (9.12.2010 - 21:42) Invis1ble написал(а):
kirik
Цитата
Этот топик?

Ага, так он и помер =)

Ну ладно, вот мой код с регуляркой (в своей работе я сделал по-другому):
$ot = '<span class="highlight"'>;
$ct = '</span>';
$source = preg_replace('#(^|' . $ot . '.*?' . $ct . '(?!\s' . $ot . '.*?' . $ct . '|$).{40,}?\s).*?(?=\s.{40,}?' . $ot . '.*?' . $ct . '|$)#su', '$1 ... $2', $source);


Но вот заковырка - квантификатор * захватывает слишком мало символов, а квантификатор {40,} - слишком много... Сорри за, возможно, оффтоп..

Спустя 42 минуты, 6 секунд (9.12.2010 - 22:24) kirik написал(а):
Если я правильно понял задачу, то вот первое что пришло в голову:
тыц
mb_regex_encoding('UTF-8');
mb_internal_encoding('UTF-8');

$str = 'Но не каждому Ванга говорила предсказания, многих людей она просто выгоняла. Так, к ней пришла женщина, спрашивающая, как ей жить после смерти сестры, ведь она потратила все средства на ее лечение. Однако Ванга выгнала ее со словами, что та женщина ни разу не пришла навестить больную сестру, никак ей не помогала, а теперь хочет найти деньги, припрятанные сестрой. И где деньги лежат, Ванга ей тоже не скажет.';

$kwd = 'Ванга';

$num = 20;
preg_match_all('#(\s|^)(.{0,' . $num . '})(\p{L&}*' . preg_quote($kwd, '#') . '\p{L&}*)(.{0,' . $num . '})(\s|$)#uis', $str, $o, PREG_SET_ORDER);

$result = array();
foreach($o as $d) {
array_shift($d);
$result[] = implode('', $d);
}
unset($o);


echo implode(' ... ', $result);

Спустя 43 минуты, 50 секунд (9.12.2010 - 23:08) Invis1ble написал(а):
kirik
я пока не испытывал, расскажи плиз, что это за метасимвол \p и квантификатор такой {L&}*, т.к. в русской оф. документации по PCRE такие не упоминаются sad.gif

Спустя 1 час, 47 минут, 55 секунд (10.12.2010 - 00:56) Invis1ble написал(а):
Скачал книгу Дж.Фридл - Регулярные выражения - 2008.pdf , буду изучать =)

Спустя 14 минут, 16 секунд (10.12.2010 - 01:10) inpost написал(а):
Invis1ble
Откуда? На русском? Дай ссылку =)

Спустя 4 минуты, 59 секунд (10.12.2010 - 01:15) Invis1ble написал(а):
Агаааа, так я и знал !! =)))

Вот

Спустя 7 минут, 39 секунд (10.12.2010 - 01:23) inpost написал(а):
А шо? Що не з`їм, то понадкушую
Спасибо =)

Спустя 23 минуты, 40 секунд (10.12.2010 - 01:47) Invis1ble написал(а):
Пожалуйста, сам случайно на нее наткнулся в гугле... До этого видел старые какие-то древние издания за 2001 год, не стал их качать...
Это бомба!!! Похоже, монополия Деда Мороза скоро сойдет на нет biggrin.gif laugh.gif

Спустя 5 минут, 46 секунд (10.12.2010 - 01:52) Self написал(а):
$pattern = '#[^>]{0,20}<b>\w+</b>[^<]{0,20}#';
preg_match_all($pattern, $str, $arr);

Спустя 29 минут, 5 секунд (10.12.2010 - 02:21) kirik написал(а):
Цитата (Invis1ble @ 9.12.2010 - 15:08)
что это за метасимвол \p и квантификатор такой {L&}*

Об этом можно почитать тут. А по-быстрому - \p{L&} это любые юникод-буквы любого регистра. Ну а звездочка - любое количество.

Спустя 1 час, 48 минут, 50 секунд (10.12.2010 - 04:10) Invis1ble написал(а):
aH6y
Цитата
Так правильнее:

Правильней, чем что? если ты о коде, написанном мной ранее в этом топике - то посмотри дату постов... Это древний топик, я тогда только начинал изучать пых =)


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.