![]() |
![]() |
Хлам 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... |