- Поиск фразы в строке, rWizard, 22:19 , 26-Апр-05 (1)
может так? /\ {5}(\w+\ )+\ {3-60}(\w+\ )+
- Поиск фразы в строке, mthawk, 02:09 , 27-Апр-05 (2)
>может так? >/\ {5}(\w+\ )+\ {3-60}(\w+\ )+ или так ($shit,$good)=split(/\s{2,}/,$string);
- Поиск фразы в строке, z3f, 09:57 , 27-Апр-05 (3)
>>может так? >>/\ {5}(\w+\ )+\ {3-60}(\w+\ )+ > >или так >($shit,$good)=split(/\s{2,}/,$string); $shit - строка на входе $good - строка на выходе $string - не понял совсем что это...=( 2, - то же не понял...
Поясните плз чайнику! PS /\ {5}(\w+\ )+\ {3-60}(\w+\ )+ - здесь вообще не понятно. что к чему и зачем - облазил все инетовские справочники - ничего не нашел или просто не видел=(
- Поиск фразы в строке, z3f, 11:48 , 27-Апр-05 (4)
>>>может так? >>>/\ {5}(\w+\ )+\ {3-60}(\w+\ )+ >> >>или так >>($shit,$good)=split(/\s{2,}/,$string); > > >$shit - строка на входе >$good - строка на выходе >$string - не понял совсем что это...=( >2, - то же не понял... > >Поясните плз чайнику! > >PS /\ {5}(\w+\ )+\ {3-60}(\w+\ )+ - здесь вообще не понятно. >что к чему и зачем - облазил все инетовские справочники - ничего >не нашел или просто не видел=( Короче - не работает=( или у меня корявые ручки... помогите! - Поиск фразы в строке, butcher, 11:59 , 27-Апр-05 (5)
>>($shit,$good)=split(/\s{2,}/,$string); > > >$shit - строка на входе Это первая часть разделённой строки>$good - строка на выходе Это втоая часть разделённой строки >$string - не понял совсем что это...=( Это ваша строка, которую нужна разделить. >2, - то же не понял... Читайте про регулярные выражения, доки рулят..
- Поиск фразы в строке, z3f, 12:18 , 27-Апр-05 (6)
Делаю так if ($stroka=~/Тип компьютера/) {($shit,$good)=split(/\s{2,}/,$stroka); print OUT $shit;} выдает пустоту - то есть пустую строку.а если так if ($stroka=~/Тип компьютера/) {($shit,$good)=split(/\s{2,}/,$stroka); print OUT $good;} выдает первую часть строки... то бишь выдает слова "Тип компьютера". я понимаю что ошибка в моем ДНК =) но всё же это - не работает и исправить это я не могу...
- Поиск фразы в строке, butcher, 12:33 , 27-Апр-05 (7)
>а если так >if ($stroka=~/Тип компьютера/) {($shit,$good)=split(/\s{2,}/,$stroka); print OUT $good;} >выдает первую часть строки... то бишь выдает слова "Тип компьютера". Добавьте перед этим: $stroka =~ /^\s*//; Или, альтернативный вариант: $stroka =~ /^\s+(.*?)\s{2,}(.*)$/; print "$1 -> $2\n";
- Поиск фразы в строке, PoizOn, 15:21 , 27-Апр-05 (8)
>>а если так >>if ($stroka=~/Тип компьютера/) {($shit,$good)=split(/\s{2,}/,$stroka); print OUT $good;} >>выдает первую часть строки... то бишь выдает слова "Тип компьютера". > >Добавьте перед этим: >$stroka =~ /^\s*//; > >Или, альтернативный вариант: >$stroka =~ /^\s+(.*?)\s{2,}(.*)$/; >print "$1 -> $2\n"; ИМХО лучший вариант для обработки подобных данных не такой. Сперва обработайте массив и приведите его к более правильной структуре: то есть. Берем ваш массив, и начинаем итерацию по каждому элементу,for($i=0;$i<@MASSIV;$i++) { $MASSIV[$i]=~s/\s{2,}/|/g;# заменяем более 2 пробелов на какой-либо символ (к примеру |) } После такой обработки, элемент будет содержать уже более "удобную" строку: типа: Слово слово|слово слово слово| Теперь достаточно сплитить строку по символу |, и вынуть все необходимые элементы: for($i=0;$i<@MASSIV;$i++) { ($first,$second)=split(/|/,$MASSIV[$i]); } ЗЫ. Непомню нужно ли экранировать |, по моему нет.
- Поиск фразы в строке, z3f, 16:52 , 27-Апр-05 (9)
Спасибо всем большое - всё работает! - Поиск фразы в строке, MTHawk, 22:58 , 27-Апр-05 (10)
>>>а если так >>>if ($stroka=~/Тип компьютера/) {($shit,$good)=split(/\s{2,}/,$stroka); print OUT $good;} >>>выдает первую часть строки... то бишь выдает слова "Тип компьютера". >> >>Добавьте перед этим: >>$stroka =~ /^\s*//; >> >>Или, альтернативный вариант: >>$stroka =~ /^\s+(.*?)\s{2,}(.*)$/; >>print "$1 -> $2\n"; >ИМХО лучший вариант для обработки подобных данных не такой. >Сперва обработайте массив и приведите его к более правильной структуре: то есть. >Берем ваш массив, и начинаем итерацию по каждому элементу, > >for($i=0;$i<@MASSIV;$i++) { > >$MASSIV[$i]=~s/\s{2,}/|/g;# заменяем более 2 пробелов на какой-либо символ (к примеру |) >} > >После такой обработки, элемент будет содержать уже более "удобную" строку: типа: > >Слово слово|слово слово слово| > >Теперь достаточно сплитить строку по символу |, и вынуть все необходимые элементы: > > >for($i=0;$i<@MASSIV;$i++) { > >($first,$second)=split(/|/,$MASSIV[$i]); >} > >ЗЫ. Непомню нужно ли экранировать |, по моему нет. Скажите, а чем $MASSIV[$i]=~s/\s{2,}/|/g с точки зрения регекспа отличается от ($first,$second)=split(/\s{2,}/,$string); ?? Мне кажется просто лишнее нагромождение кода, хотя это лишь мое мнение.
- Поиск фразы в строке, madskull, 23:31 , 27-Апр-05 (11)
>Скажите, а чем $MASSIV[$i]=~s/\s{2,}/|/g с точки зрения регекспа отличается от ($first,$second)=split(/\s{2,}/,$string); ?? > >Мне кажется просто лишнее нагромождение кода, хотя это лишь мое мнение. А зачем создавать неиспользуемые переменные? Можно все свести примерно к следующему (если исходные строки в MASSIV'е): s/^.+?\s{2,}// for @MASSIV; (если я правильно понял задачу...)
- Поиск фразы в строке, z3f, 16:25 , 29-Апр-05 (12)
>А зачем создавать неиспользуемые переменные? > >Можно все свести примерно к следующему (если исходные строки в MASSIV'е): >s/^.+?\s{2,}// for @MASSIV; > >(если я правильно понял задачу...) Вы правильно поняли задачу - но это-то просто и понятно... вот следующую задачу я никак не могу осилисть -хотя она и простая. есть строка. в этой строке в произвольном месте есть тэг <td>. после тэга идет фраза она замыкается тэгом </a>. дальше еще идет фраза. то етсь где то посредине строки есть фраза обрамленная тэгами <td> и </a>. нужно получить эту фразу. как это сделать? найти номер позиции с которой есть эта фраза не проблема, номер позиции с котрой начинается тэг </a> то же не проблема - но как выдернуть фразу?
- Поиск фразы в строке, z3f, 16:52 , 29-Апр-05 (13)
Задачу выставленную в предыдущем вопросе в принципе решил... думаю что коряво=( посмотрите этот с позволения сказать кодchop($f[$m+1],$f[$m+2],$f[$m+3]); $loc1=index(($f[$m+1].$f[$m+2].$f[$m+3]), "<TD>"); $loc2=index (($f[$m+1].$f[$m+2].$f[$m+3]),"</A>"); $hh=substr(($f[$m+1].$f[$m+2].$f[$m+3]),$loc1,$loc2+4); print "$hh \n"; Може ткто предложит более изящное решение? а то я как то в регулярных выражениях - пас=(
- Поиск фразы в строке, madskull, 23:00 , 29-Апр-05 (14)
>Задачу выставленную в предыдущем вопросе в принципе решил... >думаю что коряво=( >посмотрите этот с позволения сказать код > >chop($f[$m+1],$f[$m+2],$f[$m+3]); > >$loc1=index(($f[$m+1].$f[$m+2].$f[$m+3]), "<TD>"); > >$loc2=index (($f[$m+1].$f[$m+2].$f[$m+3]),"</A>"); > >$hh=substr(($f[$m+1].$f[$m+2].$f[$m+3]),$loc1,$loc2+4); > >print "$hh \n"; > Как тут любят говорить некоторые - фтопку :) Некрасиво и не по "перловому".>Може ткто предложит более изящное решение? >а то я как то в регулярных выражениях - пас=( А вот это зря. СтОит потратить день на изучение регекспов и жизнь будет намного проще :) Что такое $f[$m+1].$f[$m+2].$f[$m+3]? Получение строки, в которой искать? ($hh) = join("",@f[$m+1..$m+3]) =~ m#<TD>(.+?)</A>#; print "$hh \n";
|