Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: regexp: встроенный код, массивы  (Прочитано 22968 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 01-11-2007 18:19 » new

транслитерация регулярного подвыражения

требуется разбить строку на список элементов, но некоторые элементы, допустим ограниченные () содержат внутри себя разделители элементов допустим _, как выполнить сплит?

* aaa_bbb_(cc_dd) --> [aaa,bbb,cc:dd]
« Последнее редактирование: 31-01-2008 03:09 от Mayor » Записан

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-11-2007 21:49 » 

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

---

Приведи пример строки.
« Последнее редактирование: 04-11-2007 11:32 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 04-11-2007 11:59 » 

Приведи пример строки.
1.2.1 Услуга местного завершения вызова на узле связи сети связи другого оператора связи
73432959100 73432959300-73432959399 73432959800 73433100000-73433100999 73433101000-73433101799 (c 05.09.2007) 73433103000-73433103999
 73433104000-73433105999 (c 14.09.2007) 73433106000-73433106099 73433107000-73433107099 73433107100-73433107199 73433107400-73433107799 73433107800-73433107999 (c 05.09.2007) 73433108000-73433108999
 73433109000-73433109999 (c 14.09.2007) 73433219900-73433219999 73433259200-73433259499
Записан

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 04-11-2007 12:25 » 

Код: (Perl)
#!/usr/bin/perl

@result = ();

while (<>)
{
    for my $chunk (m/(\d{11}(?:-\d{11})?)/g)
    {
        push @result, [split(/-/, $chunk)];
    }
}

Для "1.2.1 Услуга местного завершения..." нужно немного усложнить.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 04-11-2007 12:45 » 

Код: (Perl)
m/(\d{11}(?:-\d{11})?)/g
Для "1.2.1 Услуга местного завершения..." нужно немного усложнить.

не понял части кода, в регулярных выражениях я еще слабоват ... для услуги будем надеяться что транслитерация не потребуется тк ту строку не планируется превращать в список
Записан

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 04-11-2007 12:57 » 

Давай подробнее...

Имеем: m/(\d{11}(?:-\d{11})?)/g

Модификатор 'g' - глобальный поиск. В скалярном контексте поиск вернет очередной найденный кусок текста, в списковом - список всех найденных кусков.

\d{11} - цифры в количесте 11 штук.

(?: ) - блок, который не приводит к захвату (образованию "кусков текста" на выходе).

Полностью выражение говорит: хочу NNNNNNNNNNN или NNNNNNNNNNN-NNNNNNNNNNN. Т.к. квантификаторы по умолчанию "жадные" (тут - '?'), то второй вариант приоритетнее, но если он не складывается, то сгодится и первый.

По регулярным выражениям посмотри в библиотеке: https://club.shelek.ru/viewfiles.php?id=45
По самому Перлу рекомендую Programming Perl - O'Reilly (или Программирование на Perl - Символ СПб).
« Последнее редактирование: 04-11-2007 13:06 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 05-11-2007 16:50 » 

Полностью выражение говорит: хочу NNNNNNNNNNN или NNNNNNNNNNN-NNNNNNNNNNN. Т.к. квантификаторы по умолчанию "жадные" (тут - '?'), то второй вариант приоритетнее, но если он не складывается, то сгодится и первый.

почитаю ка я лучше perlretut, потому что все равно не понял как использовать это в проэкте

По регулярным выражениям посмотри в библиотеке: https://club.shelek.ru/viewfiles.php?id=45
По самому Перлу рекомендую Programming Perl - O'Reilly (или Программирование на Perl - Символ СПб).

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

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 05-11-2007 17:08 » 

Mayor1, доки доками, а книги книгами. Programming Perl написана создателем perl-а и лучшего по perl я не я не видел. Годится и начинающему и профи. В сети должна быть электронная версия на английском, а переводная есть только в бумажном виде.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #8 : 19-11-2007 13:32 » 

по транслитерации - все решается в 1 строчку:
Код: (Perl)
#!perl
while(<>)
{
        s/\([^()]+\)/my $a=$&;$a=~tr"123"abc";sprintf("-=%s=-",$a);/eg;
        print;
}
Записан

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 19-11-2007 14:55 » 

Mayor1, однострочники плохи тем, что трудно читаются. Если есть возможность, лучше стараться писать ближе к классическому С-стилю, а то потом сам же будешь час разбираться, как это работает. Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #10 : 20-11-2007 15:24 » 

Mayor1, однострочники плохи тем, что трудно читаются. Если есть возможность, лучше стараться писать ближе к классическому С-стилю, а то потом сам же будешь час разбираться, как это работает. Ага


сказывается долгая работа в одного ...

это вам не ядро линукса ваять где торвальдс от каждого требует исходник понятный третьекурснику

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

Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 20-11-2007 15:30 » 

Mayor1, они потому и разваливаются, что у тебя строки ТАК выглядят )))

вот, например , я являюсь человеком рассеянным и с сумбурными мыслями (хотя, если требуется, собираюсь , естессно 0:) ) , но ты сумбурен даже с моей точки зрения! Хватаешься за всё подряд , ничего до конца не доводишь, какие то у тебя всё вопросы в кучу, какие то задачи на время ...
« Последнее редактирование: 20-11-2007 15:33 от Алексей1153++ » Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #12 : 22-11-2007 14:29 » 

от, например , я являюсь человеком рассеянным и с сумбурными мыслями (хотя, если требуется, собираюсь , естессно 0:) ) , но ты сумбурен даже с моей точки зрения! Хватаешься за всё подряд , ничего до конца не доводишь, какие то у тебя всё вопросы в кучу, какие то задачи на время ...

не за то что готовы заплатить я довожу до оплаты, а остальное просто делаю пока интересно, естесно интерес пропадает когда становится ясно как все сделать ...

что до того, что хватаюсь за все подряд, просто мне часто дают задачи которые я не знаю как решить, нет решения нет денег, поэтому решаю сразу задачи по 3, без особой жалости отбрасывая самые бесперспективные, просто если брать по 1 задаче меня может на ней начать циклить, отчего месяц другой впустую уйдет
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 22-11-2007 14:33 » 

Mayor1, это всё понятно. Когда нашёл решение - тут да, немного интерес падает, но разве не охота довести программу до конца ? Или всё остаётся на бумаге ?
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #14 : 22-11-2007 14:47 » 

Mayor1, это всё понятно. Когда нашёл решение - тут да, немного интерес падает, но разве не охота довести программу до конца ? Или всё остаётся на бумаге ?

у меня на бумаге ничего нет, ну разве что спецификации некоторых абстрактных типов данных, да текстовые\рисованые описания нереальных алгоритмов ...

просто кое что остается недоделанным кодом, который работает, но не со всеми запланированными функциями

Добавлено через 69 , 12 часов, 31 минуту и 49 секунд:
так следующая задачка:

имеется массив заранее неизвестного размера с содержимым типа:
^7232
^7909
^7804

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

* 7804ыва # передается управление
* 1237804 # не передается

зы требуется раскидать номера телефонов, на областные, федеральные сотовые и городские
« Последнее редактирование: 31-01-2008 03:19 от Mayor » Записан

1n c0de we trust
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 31-01-2008 17:13 » 

Mayor1, странный вопрос. По моему задача элементарна:

Код: (Perl)
@prefixes = ('^7232', '^7909', '^7804');

L_prefix: for $prefix (@prefixes)
{
    if (m/$prefix/)
    {
        // .....

        last L_prefix;
    }
}

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

Код: (Perl)
    if (substr($_, 0, length($prefix)) eq $prefix)
    {

    }
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #16 : 03-02-2008 18:19 » 

хм действительно элементарной оказалась, и re в данном случае никчему ... походу я прог перл не дочитал до нужной точки
Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines