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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярное выражение, разбор строки со скобками 
:(
    Опции темы
vadiml
Дата 14.11.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть строка, анализируя которую надо получить true или false, внутри есть круглые скобки разной вложенности и && (и) и || (или)
задача уже решена, но как-то топорно, некрасиво, хочется получше. сейчас:
строка в переменной $qq
Код

$qq = '('.$qq.')'; # любая пара скобкок в процессе анализа заменяется на true или false
while ( $qq =~ /\([ 0-9A-Za-z_\+\-\*=\[\]<>]+)\)/ ) { # захватывается часть, что внутри любых внутренних ( ), как написать 
    #"не круглые скобки" не придумал, выход из цикла когда перл не сможет найти выражение в (), т.е. останется только true или false
    $ww = $1;
    #здесь идет анализ строки $ww, в результале чего в $ee пишется 1 или 0 в зависимости от истинности
    if ( $ee ) {
        $qq =~ s/\([ 0-9A-Za-z_\+\-\*=\[\]<>]+)\)/true/;
        # пытался написать как $qq =~ s/\($ww\)/true/ , но почему-то не находит строку (не происходит интерполяция?), 
        # использовал кучу способов, в т.ч. с предварительной интерполяцией ( $regexp = qr/ / )
    }
    else {
        $qq =~ s/\([ 0-9A-Za-z_\+\-\*=\[\]<>]+)\)/false/;
    }

}

хотелось бы найти чем заменить $qq =~ /.../ и $qq =~ s/.../true/ 
или увидеть более элегантное решение

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


Эксперт
***


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

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



Может, как-нибудь так?
Код

my $b = qr/[ 0-9A-Za-z_+\-*=[\]<>&|]/;
#$b = qr/[^()]/; # ???
1 while $qq =~ s/\(($b+)\)/true($1)/e;
print true($qq), "\n";

sub true {
#здесь идет анализ строки $ww, в результале чего в $ee пишется true или false (или 1 0)
  my $ww = shift;
  ...
  return $ee;
}


PM MAIL   Вверх
vadiml
Дата 15.11.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот! именно [^()]
весь вечер пытался придумать как написать, знал что такой элементарной операции не может не быть, а как пишется -- забыл
уже и в \P{} полез, хотя потом забросил
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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