Forum Webscript.Ru
Программирование => Perl => Тема начата: Yuraz от 05 Августа 2002, 18:02:15
-
Кол-во слов конечно любое, требуется сделать prewievn топиков гостевой книги на начальной странице сайта.
Ещё вопросец, никто не подскажет где можно взять готовые шаблоны регулярных выражений с примерами, можно на англ.?
-
а зачем регулярные выражения? эксплодь текст в массив через пробел и выводи опять же через пробел первые 10 элементов массива
-
Ну да, гдето так
$n=10;#сколько слов вывести
$text="раз два три четыре пять шесть семь восемь девять десять одинадцать двинадцать и т.д";
$text=~s/\\s{2}/ /g;
@text=split(/ /,$text);
for ($i=0;$i<$n;$i++){
$new_text.="$text[$i] "}
print $new_text;
-
Yuraz
($new_text) = ($old_text =~ /^(\\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+)/);
если слов не меньше 10.
-
$_=\'Word w w44 ююю f g e r t c vbvn djf\';
$_=~m/(([А-Яа-яЁё\\w]+\\s?){0,5})/;
print $1;
#число в скобочках {5} это число искомых слов
-
Я бы даже сказал вот так
$_=\'Word w w44 ююю f g e r t c vbvn djf\';
$_=~m/(([А-Яа-яЁё\\w]+\\s*){0,5})/;
print $1;
#число в скобочках {5} это число искомых слов
-
#Гм а если за первым словом идёт например пример кода
$_=\'Пример 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";
#вобщим ИСКАТЬ не проблема Определятся что нужно искать ВОТ ПРОБЛЕМА
-
#ююю , ну зачем же давать человеку нерабочие советы?
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"; #чтоб видеть где конец, а где начало
-
Всем спасибо,
даже как то некрасиво, но опять у меня проблема, и открывать топик из за этого не хочется, может ещё кто сюда зайдёт....
В общем задачка простая, на Delphi это реализуется так,
a:=random(100); // любое число от 0 до 100
А как тоже самое на перле?
Делаю так, как по книге: (мне надо что бы $v была от 1 до 10)
$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;
print $v;
## a в ответ ничего...
-
## a в ответ ничего...
А я делаю так:
$a = int rand(10000000);
и у меня все ништяк, восьми(вроде)значное число, точнее от 0 до восьмизначного.
-
А где не рабочий совет КОНКРЕТНЕЙ
$_=\'Пример 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";
#имхо прежде чем говорить нужно проверять
Я ищё раз говорю что есть сложность с определением того что мы хотим найти
-
$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;
print $v;
## a в ответ ничего...
Странно... У меня работает.
-
Как-то все сложно вы все предлагаете... А я бы так сделал:
@words=split(/ /, $text);
@words10=join(" ", @words[0..9]);
print "@words10";
Кажется, именно это имел ввиду AliMamed (пост №2).
-
Прошу прощения, предыдущий пост относился к первому вопросу, невнимательно просмотрел. Что касается второго вопроса, то у меня
$a=rand(10);
$v=sprintf "%.0f", $a;
$v+=1;
print $v;
при проверке сработало "на ять". Проверял в DZSoft Perl Editor.
-
А так слабо?
$text = "Your super puper message on board";
print join(\' \', ($text =~ /(\\w+)/g)[0..3]);
Выдернет то что вам нужно, кол-во слов задаем там где цифра 3.
Напечатает
Your super puper message
Хоть решение уже и было, написал для того, чтобы увидели другие возможности регуляров.
-
А как взять первые 100 букв из переменной?
-
if ($peremennaya=~/(.{100})/){$sto_znakov=$1}
ента штука первых 100 знакомест берет, ну а если чиста букв, то наверно регулярно выражаться надо примерно
/([a-zA-Z]){100}/
или правильней будет подставить \\w вместо [a-zA-Z]
тогда тока буквы
-
Mog. , спасибо, но если в переменной менее 100 символов, у меня что то всё работает наоборот... Берётся что то из середины, печатается не понятно что то.
$obiavl="";
$sto_znakov="";
$obiavl="$row[15]"; # тут от 10 до 500 символов
if ($obiavl=~/(.{100})/){$sto_znakov=$1}
print "$sto_znakov"; # надо напечатать не более 100
-
.{100} - ровно 100 символов
.{0,100} - до 100 символов
$sto_znakov=($obiavl=~/^(.{0,100})/)[0];
Но проще использовать substr. Регулярные выражения здесь не нужны.
Mog.
\\w == [0-9a-zA-Z]
-
YA именно substr больше всего и помогло. Спасибо!