The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Тематический каталог: Проверка сбалансированности скобок на ..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Тематический каталог: Проверка сбалансированности скобок на ..."  +/
Сообщение от auto_topic (??) on 02-Фев-10, 10:15 
Обсуждение статьи тематического каталога: Проверка сбалансированности скобок на Perl (regex perl)

Ссылка на текст статьи: http://www.opennet.ru/base/dev/nested_regex.txt.html

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Проверка сбалансированности скобок на Perl (regex perl)"  +/
Сообщение от Denis email(??) on 02-Фев-10, 10:15 
Вариант проверки сбалансированности и правильной вложенности набора круглых, квадратных и фигурных скобок:

#!/usr/bin/perl

use strict;

my $cnt; my $s; my $stop;
$_ = shift;
print "$_ is OK" if
             (m/^
                (?: (?{ $cnt = 0; $stop = 0; $s = ""; })
                    (?> (?(?{ $stop })\G(?!))
                      ([\(\[\{]) (?{ ++$cnt; $s .= $1; print $s . "\n"; })
                      |\) (?(?{ $cnt and (chop($s) eq "(") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |\] (?(?{ $cnt and (chop($s) eq "[") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |\} (?(?{ $cnt and (chop($s) eq "\{") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |(?> [^()] )
                    )*
                )
                (?(?{ $cnt }) (?!) )
             $/x);

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Проверка сбалансированности скобок на Perl (regex perl)"  +/
Сообщение от Denis email(??) on 02-Фев-10, 10:22 
упс... упустил кое-что...

#!/usr/bin/perl

use strict;

my $cnt; my $s; my $stop;
$_ = shift;
print "$_ is OK\n" if
             (m/^
                (?: (?{ $cnt = 0; $stop = 0; $s = ""; })
                    (?> (?(?{ $stop })\G(?!))
                      ([\(\[\{]) (?{ ++$cnt; $s .= $1; })
                      |\) (?(?{ $cnt and (chop($s) eq "(") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |\] (?(?{ $cnt and (chop($s) eq "[") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |\} (?(?{ $cnt and (chop($s) eq "\{") }) (?{ --$cnt; }) | (?{ ++$stop; })(?!))
                      |(?> [^()\[\]\{\}] )
                    )*
                )
                (?(?{ $cnt }) (?!) )
             $/x);

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру