К списку форумов К списку вопросов
Помогите с рэгами (ПХП), пжлуста
Хлам
09.03.2004 - 13:58
$text = eregi_replace[^[:space:][^\<a href=http:\/\/.+>.+<\/a>]]{50,}, "...", $text);
Этот кусок задумывался для следующего: заменить все строки длиной более пятидесяти непробельных (тьфу, слово-то какое) символов, кроме строк-ссылок (типа <a href=http://куда-то>ссылка</a>) на сооотвестсвенно "...". Но че-то нифига не выходит. Подскажете, мож? если че, сильно не бейте, тяжеловастенько мне эти реги даются
Zeratul
1 - 09.03.2004 - 14:14
не шару в регах, но разве не такой синтаксис у eregi_replace?
$text = eregi_replace("[^[:space:][^\<a href=http:\/\/.+>.+<\/a>]]{50,}", "...", $text);
Хлам
2 - 09.03.2004 - 14:24
Ну да, именно такой...Но вопрос не по синтаксису, вопрос по самому шаблону поиска
DIVЕR
3 - 09.03.2004 - 14:27
Хлам, посмотри архив, передо мной стояла ТОЧНО ТАКАЯ ЖЕ задача около месяца назад, тоже на PHP, только используя PCRE (т.е. Перловый диалект регэкспов).
Zeratul - не порядок!! =) Для эффективного web-программирования regexp'ы необходимы!!! ;)
Уверенный
4 - 09.03.2004 - 14:28
Надо всю строку заменить на "...", или только то, что после 50 символов идет?
Zeratul
5 - 09.03.2004 - 14:30
to Хлам: ты в курсе, что кроме eregi существует и preg и у них отличается синтаксис, причем preg работает быстрее?
Zeratul
6 - 09.03.2004 - 14:31
to DIVER: мои душевные муки не позволяют изучить этот раздел PHP (раза 3 пытался). Потом забил - адаптирую те, что работают и иногда тут спрашиваю :)
Хлам
7 - 09.03.2004 - 14:33
3: спасиб, пошаримся.
4: надо строку, длиннее 50 символов заменить на "..." (ну или чего воспаленная фантазия подскажет)
Уверенный
8 - 09.03.2004 - 14:47
Обязательно одним регэкспом? Я бы сделал так:
#!/usr/bin/perl -w
use strict;
while (<DATA>) {
    s/\S{50,}/.../ unless /<a href.*?<\/a>/i;
    print;
}
__DATA__
ffffffffffffffffffffff
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggg hhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjj kkkkkkkkkkkk
eee rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ttt
<a href=ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg>dddddddddddd</a>
-
печатает:
-
ffffffffffffffffffffff
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggg hhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjj kkkkkkkkkkkk
eee ... ttt
<a href=ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg>dddddddddddd</a>
DIVЕR
9 - 09.03.2004 - 14:52
Zeratul - я купил книгу Джеффри Фридла, о чём нисколько не жалею. Советую тебе поступить также, регэкспы действительно делают жизнь проще!
.
Блин! В очередной поражаюсь Perl!!!!... Изящность синтаксиса, конечно, не отнять!! =)))
mae
10 - 10.03.2004 - 06:14
А спрашивали, между прочим, про пэхэпэ.
Ещё раз привожу свой вариант:
-----------------------------------------
sub short_word {
my @strings=@_;
for(0..$#strings){
$strings[$_]=substr($strings[$_],0,20)."...".substr($strings[$_],length($strings[$_])-19,19) if(length($strings[$_])>42);
}
return wantarray?@strings:$strings[0];
}
sub url {
my @strings=@_;
foreach(@strings){
s!([^/]|^)www\.((?:(?:[\w\-]+\.){1,4})[a-z]{2,4}/?)!$1http://www.$2!gi;
s!((?:ht|f)tps?://)((?:[\w\-]+\.){1,4}[a-z]{2,4}(?:\:\d{2,5})?)((?:/[\w\-~^\.]+){0,8})(/(?:(?:\w+\.){1,3}[a-z]{1,5})?)?(\?[\w=\-%&#]*)?!"<a href=$1$2".(($3)?$3:'').(($4)?$4:'').(($5)?$5:'').">".short_word($2.(($3)?$3:'').(($4)?$4:'').(($5)?$5:''))."</a>"!gei;
s!(?:mailto:)?([\w\-\.\*]+)\@((?:(?:[\w\-]+\.){1,4})[a-z]{2,4})!"<a href=mailto:$1\@$2>".short_word($1."\@".$2)."</a>"!gei;
s!([^\s\n/:;%,\.]{42,})!short_word $1!ge;
}
return wantarray?@strings:$strings[0];
}
---------------------------------------------------------
Использовать как url($string) или как url(@array). Делает ссылки гиперссылками и слова длиннее 48 символов укорачивает, вставляя "...", при этом содержимое ссылок оставляет нетронутым.
mae
11 - 10.03.2004 - 06:15
Но это опять де перл. Перевести на пэхэпэ, однако, не трудно.
mae
12 - 10.03.2004 - 06:17
не 48, а 42...

К списку вопросов на форуме Веб-дизайн

>>