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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон для метасимволов, Не могу подобрать шаблон для ^- 
V
    Опции темы
Marlik
Дата 21.5.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго всем. 

Есть строка ^-59869856jkjgspofijgjspogjr начинается с ^- как Вы заметили. 
Требуется вырезать цифры. Цифры вырезаю, но получается такой вариант: ^-59869856

 Как только не пробовал, первые два метасимвола никак не хотят выделяться

.+ - не работает
\W - не работает

уже как только не пробовал, может кто-то встречался с такой проблемой, спасибо.
PM WWW Skype   Вверх
Pfailed
Дата 22.5.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Покажите как вырезаете то.


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


Бывалый
*


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

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



Там на самом деле несколько строк, нужен вариант регекспа что-бы подошел ко всем,  это типа тестового задания, мне оно не надо но дело принципа:

Код


my $str = "^92(28/10/2002)**&[19:10:50]\@Comment: Text String";
my $str2 = "^-06/02/2002*$21:55:45";
my $str3 = "^*13/08/2002*DX145&[22:50:20]\@Comment: Text String";

$str =~ s/.+((\d){2}\/(\d){2}\/(\d){4}).+((\d+)\:(\d+)\:(\d+)).+(Comment:)(.+)/$1 - $5 - $+/i;



Вот второй вариант никак не решается, мозг сломал.

Это сообщение отредактировал(а) Marlik - 22.5.2010, 15:37
PM WWW Skype   Вверх
rumax
Дата 31.5.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Marlik @ 22.5.2010,  15:34)
Там на самом деле несколько строк, нужен вариант регекспа что-бы подошел ко всем,  это типа тестового задания, мне оно не надо но дело принципа:

Код


my $str = "^92(28/10/2002)**&[19:10:50]\@Comment: Text String";
my $str2 = "^-06/02/2002*$21:55:45";
my $str3 = "^*13/08/2002*DX145&[22:50:20]\@Comment: Text String";

$str =~ s/.+((\d){2}\/(\d){2}\/(\d){4}).+((\d+)\:(\d+)\:(\d+)).+(Comment:)(.+)/$1 - $5 - $+/i;



Вот второй вариант никак не решается, мозг сломал.

Решается довольно просто:
Код

my $pattern = '^.*(\d{2}\/\d{2}\/\d{4}).*(\d{2}:\d{2}:\d{2})[\].]*(?(?=@Comment: )@Comment: (.*))';
if ($txt =~ m/$pattern/) {
  my $date    = defined($1) ? $1 : "Unknown";
  my $time    = defined($2) ? $2 : "Unknown";
  my $comment = defined($3) ? $3 : "Unknown";
  p("date    = [".$date."]", 1);
  p("time    = [".$time."]", 1);
  p("comment = [".$comment."]", 1);
} else {
  p("No matches", 1);
}

 smile 

З.Ы. $txt - значение $str, $str2 или $str3


Это сообщение отредактировал(а) rumax - 31.5.2010, 16:07
PM MAIL   Вверх
Marlik
Дата 9.6.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо конечно, но у Вас также не работает патерн со строкой в этой переменной $str2...
PM WWW Skype   Вверх
rumax
Дата 10.6.2010, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Marlik @ 9.6.2010,  19:38)
Спасибо конечно, но у Вас также не работает патерн со строкой в этой переменной $str2...

Действительно, странно. А вот если строку взять в одинарных кавычках, то работает.

ну или так переменные объявить
Код

my $str1 = "^92(28/10/2002)**&[19:10:50]\@Comment: Text String";
my $str2 = "^-06/02/2002*\$21:55:45";
my $str3 = "^*13/08/2002*DX145&[22:50:20]\@Comment: Text String";



Это сообщение отредактировал(а) rumax - 14.6.2010, 12:01
PM MAIL   Вверх
dva300
Дата 12.6.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Marlik @ 22.5.2010,  15:34)
Там на самом деле несколько строк, нужен вариант регекспа что-бы подошел ко всем,  это типа тестового задания, мне оно не надо но дело принципа:


ели я правильно понял то нужно вытащить дату и время ?

тогда так

Код

use strict;
my $str = "^92(28/10/2002)**&[19:10:50]\@Comment: Text String";
my $str2 = "^-06/02/2002*&21:55:45";
my $str3 = "^*13/08/2002*DX145&[22:50:20]\@Comment: Text String";

if ($str3 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?/)
    {
    print "$1 , $2"; 
    }

--------------------
Участник движения Культура Вождения
PM   Вверх
Marlik
Дата 12.6.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да, поняли почти правильно, дату, время, и все что после Comment:. но все равно если

Код

if ($str2 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?/)
    {
    print "$1 , $2"; 
    }


то результат тот-же, никакой. Нужно найти регэксп который подойдет для всех трех вариантов. Но все равно спасибо, за участие.
PM WWW Skype   Вверх
dva300
Дата 13.6.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Marlik @ 12.6.2010,  19:38)
Да, поняли почти правильно, дату, время, и все что после Comment:. но все равно если

Код

if ($str2 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?/)
    {
    print "$1 , $2"; 
    }


то результат тот-же, никакой. Нужно найти регэксп который подойдет для всех трех вариантов. Но все равно спасибо, за участие.

хм... проверил еще раз... у меня работает без проблем. добавил чтобы еще и после Comment выбирал 
выполняет нормально и для переменных и если из файла читать.

рассказывайте тогда полностью процедуру как делаете. может у вас строки все же другие ?

Код

use strict;
print "...from vars...\n";
my $str1 = "^92(28/10/2002)**&[19:10:50]\@Comment: Text String str1";
my $str2 = "^-06/02/2002*&21:55:45";
my $str3 = "^*13/08/2002*DX145&[22:50:20]\@Comment: Text String str3";

if ($str1 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?(.*Comment:)?(.*)/)
    {
    print "$1 , $2 ,$4\n"; 
    }
if ($str2 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?(.*Comment:)?(.*)/)
    {
    print "$1 , $2 ,$4\n"; 
    }
if ($str3 =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?(.*Comment:)?(.*)/)
    {
    print "$1 , $2 ,$4\n";
    }    
    
print "...from file...\n";
open(FF,"for_fact.txt") or die "$! : Error";
while(<FF>)
    {
    if ($_ =~ /\(?(\d{2}\/\d{2}\/\d{4})\)?.+\[?(\d{2}:\d{2}:\d{2})\]?(.*Comment:)?(.*)/)
        {
        print "$1 , $2 ,$4\n"; 
        }
    }
close(FF);    



вывод следующий 

Код

...from vars...
28/10/2002 , 19:10:50 , Text String str1
06/02/2002 , 21:55:45 ,
13/08/2002 , 22:50:20 , Text String str3
...from file...
28/10/2002 , 19:10:50 , Text String str1
06/02/2002 , 21:55:45 ,
13/08/2002 , 22:50:20 , Text String str3

--------------------
Участник движения Культура Вождения
PM   Вверх
Marlik
Дата 14.6.2010, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У Вас ошибка со второй переменной $str2, Вы знак доллара - $ заменили амперсандом - &

Мой вариант: my $str2 = "^-06/02/2002*$21:55:45";
Ваш вариант: my $str2 = "^-06/02/2002*&21:55:45";

Поэтому и не работает у меня, спасибо.
PM WWW Skype   Вверх
dva300
Дата 14.6.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Marlik @ 14.6.2010,  08:36)
У Вас ошибка со второй переменной $str2, Вы знак доллара - $ заменили амперсандом - &

Мой вариант: my $str2 = "^-06/02/2002*$21:55:45";
Ваш вариант: my $str2 = "^-06/02/2002*&21:55:45";

Поэтому и не работает у меня, спасибо.

хм... действительно аномалия какая-то  smile 
но суть от этого не меняется при инициализации переменных используйте '' (апострофы) а не "" (кавычки)
с файлом работает и так.


--------------------
Участник движения Культура Вождения
PM   Вверх
rumax
Дата 14.6.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dva300 @ 14.6.2010,  13:56)
Цитата(Marlik @ 14.6.2010,  08:36)
У Вас ошибка со второй переменной $str2, Вы знак доллара - $ заменили амперсандом - &

Мой вариант: my $str2 = "^-06/02/2002*$21:55:45";
Ваш вариант: my $str2 = "^-06/02/2002*&21:55:45";

Поэтому и не работает у меня, спасибо.

хм... действительно аномалия какая-то  smile 
но суть от этого не меняется при инициализации переменных используйте '' (апострофы) а не "" (кавычки)
с файлом работает и так.

С апострофами и мой код работает. А если кавычки использовать, то будет ругаться на переменные необъявленные
PM MAIL   Вверх
dva300
Дата 14.6.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(rumax @ 14.6.2010,  14:24)
Цитата(dva300 @ 14.6.2010,  13:56)
Цитата(Marlik @ 14.6.2010,  08:36)
У Вас ошибка со второй переменной $str2, Вы знак доллара - $ заменили амперсандом - &

Мой вариант: my $str2 = "^-06/02/2002*$21:55:45";
Ваш вариант: my $str2 = "^-06/02/2002*&21:55:45";

Поэтому и не работает у меня, спасибо.

хм... действительно аномалия какая-то  smile 
но суть от этого не меняется при инициализации переменных используйте '' (апострофы) а не "" (кавычки)
с файлом работает и так.

С апострофами и мой код работает. А если кавычки использовать, то будет ругаться на переменные необъявленные

я что-то не пойму. не хотите апострофы использовать тогда экранируйте символ $ через \$ в ручную.

или это задача на выносливость мозга ? 

--------------------
Участник движения Культура Вождения
PM   Вверх
Marlik
Дата 14.6.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нельзя менять, кавычки на апострофы, и не нужно читать из файла. Есть эти три строки, и надо придумать один регэксп для всех трех. Я так понимаю что в строках, использованы метасимволы, их надо как-то обойти.

Меня интересует такая инструкция: 

\Q - Вплоть до команды \E все последующие метасимволы становятся обычными символами...

А вот как это применить не пробовал, и не знаю...
PM WWW Skype   Вверх
dva300
Дата 14.6.2010, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Marlik @ 14.6.2010,  16:23)
Нельзя менять, кавычки на апострофы, и не нужно читать из файла. Есть эти три строки, и надо придумать один регэксп для всех трех. Я так понимаю что в строках, использованы метасимволы, их надо как-то обойти.

Меня интересует такая инструкция: 

\Q - Вплоть до команды \E все последующие метасимволы становятся обычными символами...

А вот как это применить не пробовал, и не знаю...

я когда был маленький то работал у одного из провайдеров админом. так там наш главный админ при приеме на работу новеньких давал им задачу следующего характера - "дается заведомо не рабочий модем с каким-либо дефектом и ставилась задача завести его в модемный пул."  сколько мы тогда гипотез наслушались..... 
--------------------
Участник движения Культура Вождения
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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