Forum Webscript.Ru

Программирование => Perl => Тема начата: Yuraz от 05 Августа 2002, 18:02:15

Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Yuraz от 05 Августа 2002, 18:02:15
Кол-во слов конечно любое, требуется сделать prewievn топиков гостевой книги на начальной странице сайта.
Ещё вопросец, никто не подскажет где можно взять готовые шаблоны регулярных выражений с примерами, можно на англ.?
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: AliMamed от 05 Августа 2002, 18:59:43
а зачем регулярные выражения? эксплодь текст в массив через пробел и выводи опять же через пробел первые 10 элементов массива
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: ESE от 05 Августа 2002, 20:40:31
Ну да, гдето так
$n=10;#сколько слов вывести
$text="раз  два три четыре пять шесть семь восемь девять десять одинадцать двинадцать и т.д";
$text=~s/\\s{2}/ /g;
@text=split(/ /,$text);
for ($i=0;$i<$n;$i++){
$new_text.="$text[$i] "}
print $new_text;
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Serchey от 05 Августа 2002, 21:50:03
Yuraz
($new_text) = ($old_text =~ /^(\\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+)/);
если слов не меньше 10.
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Unregistered от 05 Августа 2002, 23:35:13
$_=\'Word w w44 ююю f g e r t c vbvn djf\';
$_=~m/(([А-Яа-яЁё\\w]+\\s?){0,5})/;
print $1;

#число в скобочках {5} это число искомых слов
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: ююю от 05 Августа 2002, 23:37:45
Я бы даже сказал вот так
$_=\'Word w   w44 ююю f g e r t c vbvn djf\';
$_=~m/(([А-Яа-яЁё\\w]+\\s*){0,5})/;
print $1;

#число в скобочках {5} это число искомых слов
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: ююю от 06 Августа 2002, 00:09:21
#Гм а если за первым словом идёт например пример кода
$_=\'Пример my $x; for(1..10){ print $x++;} вот так вот работает инкримент\';
 
#1
$_=~m/((.*?\\s{1,}){0,5})/;
print "$1\\n";
#2
@array[1..5]=$_=~m/([А-Яа-яЁёA-Za-z]+)\\s{1,}/g;
print "@array";

#вобщим ИСКАТЬ не проблема Определятся что нужно искать ВОТ ПРОБЛЕМА
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Unregistered от 06 Августа 2002, 13:18:50
#ююю , ну зачем же давать человеку нерабочие советы?

100% рабочий вариант:
#!/usr/bin/perl -w
use strict;
my $x = \'zxc vbn m,. asd 123 345 g2g 5jk\'; #просто текст
my ($a)=($x=~/^((\\S+\\s+){1,5})/); #сколько нужно слов
$a =~ s/\\s$//; #если нам не нужен в конце пробел
print "-$a-\\n"; #чтоб видеть где конец, а где начало
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Yuraz от 06 Августа 2002, 13:48:11
Всем спасибо,
даже как то некрасиво, но опять у меня проблема, и открывать топик из за этого не хочется, может ещё кто сюда зайдёт....
В общем задачка простая, на Delphi это реализуется так,
a:=random(100);  // любое число от 0 до 100

А как тоже самое на перле?
Делаю так, как по книге: (мне надо что бы $v была от 1 до 10)

$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;

print $v;

## a в ответ ничего...
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Mog. от 06 Августа 2002, 14:10:46
Цитировать
## a в ответ ничего...


А я делаю так:

$a = int rand(10000000);

и у меня все ништяк, восьми(вроде)значное число, точнее от 0 до восьмизначного.
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Unregistered от 06 Августа 2002, 15:28:25
А где не рабочий совет КОНКРЕТНЕЙ

$_=\'Пример my $x; for(1..10){ print $x++;} вот так вот работает инкримент\';

#1
$_=~m/((.*?\\s{1,}){0,5})/; #ИЩИ ВСЁ ЧТО ПОПАЛО РАЗДЕЛЁННОЕ ПРОБЛНЫМИ СИМВОЛАМИ
print "$1\\n";
#2
@array[1..5]=$_=~m/([А-Яа-яЁёA-Za-z]+)\\s{1,}/g;#ИЩИТ ТОЛЬКО СЛОВА ТОЕСТЬ $F это не слоао и for(1..0){ это тоже не слово
print "@array";


#имхо прежде чем говорить нужно проверять
Я ищё раз говорю что есть сложность с определением того что мы хотим найти
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Maniac от 06 Августа 2002, 16:19:04
Цитировать
$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;

print $v;

## a в ответ ничего...


Странно... У меня работает.
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Unregistered от 14 Августа 2002, 11:33:42
Как-то все сложно вы все предлагаете... А я бы так сделал:
@words=split(/ /, $text);
@words10=join(" ", @words[0..9]);
print "@words10";
Кажется, именно это имел ввиду AliMamed (пост №2).
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Unregistered от 15 Августа 2002, 15:51:50
Прошу прощения, предыдущий пост относился к первому вопросу, невнимательно просмотрел. Что касается второго вопроса, то у меня
$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;

print $v;
при проверке сработало "на ять". Проверял в DZSoft Perl Editor.
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: dymka от 15 Августа 2002, 19:48:37
А так слабо?

$text = "Your super puper message on board";
print join(\' \', ($text =~ /(\\w+)/g)[0..3]);

Выдернет то что вам нужно, кол-во слов задаем там где цифра 3.
Напечатает
Your super puper message
Хоть решение уже и было, написал для того, чтобы увидели другие возможности регуляров.
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Yuraz от 13 Сентября 2002, 12:09:42
А как взять первые 100 букв из переменной?
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Mog. от 13 Сентября 2002, 15:29:40
if ($peremennaya=~/(.{100})/){$sto_znakov=$1}

ента штука первых 100 знакомест берет, ну а если чиста букв, то наверно регулярно выражаться надо примерно

/([a-zA-Z]){100}/

или правильней будет подставить \\w вместо [a-zA-Z]  
тогда тока буквы
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Yuraz от 13 Сентября 2002, 16:37:59
Mog. , спасибо, но если в переменной менее 100 символов, у меня что то всё работает наоборот... Берётся что то из середины, печатается не понятно что то.

       $obiavl="";
       $sto_znakov="";
       $obiavl="$row[15]";   # тут от 10 до 500 символов
       if ($obiavl=~/(.{100})/){$sto_znakov=$1}
       print "$sto_znakov";   # надо напечатать не более 100
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: YA от 13 Сентября 2002, 16:57:11
.{100} - ровно 100 символов
.{0,100} - до 100 символов

$sto_znakov=($obiavl=~/^(.{0,100})/)[0];

Но проще использовать substr. Регулярные выражения здесь не нужны.

Mog.
\\w == [0-9a-zA-Z]
Название: Есть текст, как взять из него первые 10 слов?
Отправлено: Yuraz от 13 Сентября 2002, 17:46:19
YA именно substr больше всего и помогло. Спасибо!