LINUX.ORG.RU

несколько регулярных выражений

 


0

1

и снова дратути)

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

1) как удалять весь текст в каждой строке массива ПОСЛЕ второго\третьего\четвертого\пятого\шестого пробела?

2) как удалять весь текст в каждой строке массива ДО первого\второго\третьего\четвертого\пятого пробела в строке?

в целом нужно из массива который состоит из строк типа (10 ELTX5C087C60DIS 9 1 OK -12.98 3.24.1.630 NTU-RG-1402G-W Valik) вычленять данные которые разделены пробелами, больше всего меня интересу цифра 9 которая стоит после второго пробела. в массиве из таких вот строк должна остаться только она.

3) - найти в строке слово начинающееся на ELTX и заканчивающееся на DIS

4) - найти в строке слово начинающееся на ELTX и удалить все до DIS

5) удалить из СЛОВА все что после ELTX

6) удалить из слова все что ДО DIS

просьба не отправлять читать книги, нет времени, домой хочется.

гуглил, то что нужно не нашел.

за 3 дня написал веб морду для цыско маршрутизатора и коммутатора, сейчас осталось дописать морду для последней железки и можно сдавать работу и отчаливать домой из коммандировки.

те кто писали мне что с моими знаниями перла я ничего подобного не напишу - горите в аду.

тем кто помог - поклон в ноги.

если комуто нужны эти скрипты - пишите, скину.

4 дня работать с утра до вечера за 50$

Тогда помогать бесполезно, собирай бутылки и металлолом.

outtaspace ★★★
()
Ответ на: комментарий от diakon2

алчный

Ты хочешь, чтобы за тебя сделали твою работу. Работы тут на полчаса-час, $50 - это меньше 3 килорублей, за меньшее что-либо делать просто неприлично. То есть либо даром помогать, либо за пиво, либо за хоть какие-то деньги. Пива ты поставить, я так понимаю, не сможешь по географическим соображениям, за так чужую работу делать как-то не комильфо, а брать меньше $50 - это удел индусов и нищих студентов.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от outtaspace

приезжайте в крым, посмотрим сколько вы в несезон в курортном городе заработаете с населением в 10-15 тыс человек.

diakon2
() автор топика
Ответ на: комментарий от DELIRIUM

вам написать 1 регулярку - вопрос ну скажем минуты максимум. мне тыкаться день-два. за это вы просите 50 зеленых? серьезно?

diakon2
() автор топика
Ответ на: комментарий от diakon2

Тут вопрос принципа. Это твоя работа, за которую тебе платят зп. Давай ты за меня сделаешь мою работу, а я просто ЗП получу?

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

если я умею ее делать и знаю как то давайте, бартер меня устроит.

если не умею и не знаю то извиняйте, косорезить не буду.

diakon2
() автор топика
Ответ на: комментарий от diakon2

Держи уж. Могут быть косяки, я особо не тестировал, но принципы уловить можно.

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

use constant TEXT => "10 ELTX5C087C60DIS 9 1 OK -12.98 3.24.1.630 NTU-RG-1402G-W Valik";

{
  say "remove everything after 3rd space";
  my $s = TEXT;
  if ($s =~ s/((?:\S+ ){3}).*/$1/) {
    say $s;
  }
}

{
  say "remove everything before 3rd space";
  my $s = TEXT;
  if ($s =~ s/(?:\S+ ){3}(.*)/$1/) {
    say $s;
  }
}

{
  say "find word beginning with 'ELTX' and ending with 'DIS'";
  my $s = TEXT;
  foreach (split /\s+/, $s) {
    say $_ if m/^ELTX.*DIS$/;
  }
}

{
  say "remove from string everything before DIS if word matches /ELTX.*DIS/";
  my $s = TEXT;
  if ($s =~ s/^(?:.*\s+ELTX.*)(DIS(:?\s.*)?)$/$1/) {
    say $s;
  }
}

{
  say "remove everything after 'ELTX' from matching word";
  my $s = TEXT;
  if ($s =~ s/^(.*\s+ELTX)\w*(.*)/${1}${2}/) {
    say $s;
  }
}

{
  say "find word beginning with 'ELTX' and remove symbols in it before 'DIS'";
  my $s = TEXT;
  if ($s =~ s/^(.*\s+)ELTX\w*(DIS.*)/${1}${2}/) {
    say $s;
  }
}
DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от diakon2

приезжайте в крым

Зачем мне в Крым приезжать? Я свалил из Крыма в 2015м, мне ваши проблемы не интересны и не нужны.

outtaspace ★★★
()

http://perldoc.perl.org/functions/split.html

вычленять данные которые разделены пробелами

здесь больше подойдет split

my $data = q[10 ELTX5C087C60DIS 9 1 OK -12.98 3.24.1.630 NTU-RG-1402G-W Valik];
my @res = split(/\s+/, $data);
# далее
$res[0]; # 10;
$res[1]; # ELTX5C087C60DIS
# и т. п.
# удалять весь текст в каждой строке массива ПОСЛЕ четвертого пробела
print join ' ', @res[0..3];
pru-mike ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.