Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по регулярным выажениям и массивам 
:(
    Опции темы
tcg2
Дата 6.4.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 26.9.2006

Репутация: нет
Всего: нет



Помогите извлеч IP и port от данного примера с помощью perl если в файле содержится такого рода информация
192.168.0.44.80
44.5.234.66.23
 и резултат записать в масив на выходе в таком виде:
192.168.0.44     80
44.5.234.66       23
Делаю я вот так,знаю что не совсем так, но если б знал как надо, не спрашивал бы, так что сильно не судите :
...
$ip = m/\d+\.\d+\.\d+\.\d+/;                                                                                            
                                                                                                                            
    $port = s/\d+\.\d+\.\d+\.\d+//  && s/\.//;                                                                                                         
                                                                                                                            
    @arr = ($ip,$port);                                                                                                     
                                                                                                                            
    print ("@arr\n");
... (меня интересует конкретно ета часть)
PM MAIL ICQ   Вверх
KSURi
Дата 6.4.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Не совсем понятно чего вы точно хотите, но думаю этот код вам поможет:
Код

open(IN, 'file.in') || die $!;
open(OUT, '>', 'file.out') || die $!;
map { /([\d\.]+)\.(\d+)/ && print OUT $1, "\t", $2, "\n" } <IN>;
close IN;
close OUT;



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tcg2
Дата 6.4.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 26.9.2006

Репутация: нет
Всего: нет



Почему при токай строке в програме 

$ip = m/\d+\.\d+\.\d+\.\d+/; 

при компиляции выдается для  $ip вот такой результат 1 , что как бы ip = 1, несмотря что ip адреса разные?

Это сообщение отредактировал(а) tcg2 - 6.4.2008, 21:41
PM MAIL ICQ   Вверх
nitr
Дата 6.4.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: нет
Всего: 84



tcg2, документацию прочтите по рег.выражениям.
Вместо = используйте =~

Это сообщение отредактировал(а) nitr - 6.4.2008, 22:21


--------------------
PM   Вверх
tcg2
Дата 7.4.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 26.9.2006

Репутация: нет
Всего: нет



Ну и так делал как велили все равно ему не нравится
Может еще раз попробуем, допустим строка такая:
 
Цитата

date today 12 192.168.0.44.80 gate old

 из нее нужно будет извлеч IP адрес и порт  
в таком примерно виде, с портом я разобрался, а с IP не могу:
 
Цитата

192.168.0.44    80

 
...(Perl)  
$ip = m/\d+\.\d+\.\d+\.\d+/; при таком раскладе в качестве IP выдается '1'  
$ip =~ m/\d+\.\d+\.\d+\.\d+/;при таком раскладе в качестве IP выдается 'ничего'
PM MAIL ICQ   Вверх
shamber
Дата 7.4.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



а скобочки нигде не нужны?

З.ы $ip = m/\d+\.\d+\.\d+\.\d+/; при таком раскладе в качестве IP выдается '1'  
просто показывает , что регулярка найдена. 


ЗЫЫ 
Код

$ip =~ /(\d+\.\d+\.\d+\.\d+)/;
$ip = $1;


Это сообщение отредактировал(а) shamber - 7.4.2008, 11:45
PM MAIL Jabber   Вверх
Loki
Дата 7.4.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 9.7.2006

Репутация: нет
Всего: нет



А как разбить строчку, например...
Код

C 192.168.20.0/24 is directly connected, Ethernet1

Так что-бы каждая цифра 192, 168,  20, 0/24 была отдельной переменной?

PM MAIL   Вверх
tcg2
Дата 7.4.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 26.9.2006

Репутация: нет
Всего: нет



Спасибо искренее! Выручили, все работает!
PM MAIL ICQ   Вверх
shamber
Дата 7.4.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



Loki, 
Код

$ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+\/\d+)/;

в переменных $1, $2, $3 и $4 будет то что надо.
А так идите в раздел почитайте.

PM MAIL Jabber   Вверх
Loki
Дата 7.4.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 9.7.2006

Репутация: нет
Всего: нет



Ок, а может еще идею подкините...
Нужно все это складывать таким образом в ексель, что калонки $1 $2 $3 $4 уже заполнены и нужно найти совпадение всех четырех значений в строке, покрасить это строку.
PM MAIL   Вверх
tolkien
Дата 7.4.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



тебе уже в раздел в VBA пора
PM MAIL   Вверх
nitr
Дата 7.4.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: нет
Всего: 84



tolkien, почему же, перл разочулся работать с Excel?
Loki, по правилам форума - новую тему. И когда создадите, постарайтесь более вразуметельно задать вопрос.


--------------------
PM   Вверх
tcg2
Дата 21.4.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 26.9.2006

Репутация: нет
Всего: нет



Ребята, выручитеще раз?
Есть такая строка, нужно записать в переменную, все что находится, взято на чтение с конца к началу до первого пробела, или короче($_ = 1160):
Код

username          11-02-2008          11:08:30  1160

PM MAIL ICQ   Вверх
KSURi
Дата 21.4.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Код

(split /\s+/)[3]

или
Код

/\s+(\S+)$/


Это сообщение отредактировал(а) KSURi - 21.4.2008, 11:49


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tishaishii
Дата 23.4.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Код
?\S+$??$&:$';
?\S+$?&&$&|$'


Это сообщение отредактировал(а) tishaishii - 23.4.2008, 16:02
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.