LINUX.ORG.RU

Regexp и строки со вложенными скобками


0

0

Возникла проблема, надо из строки вынуть участки которые в скобках. Причём скобки могут быть вложенными (к примеру "( ())") на любую глубину. Есть ли способ это сделать только по средствам регулярных выражений? Выражения в стиле перл

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

Регулярным выражениям это не посредствам..

dilmah ★★★★★
()

есть Text::Balanced

Или вот:

sub get_matching_parens
{
  my $expr = shift;

  my @matching_parens = ();
  my @stk = ();
  for (my $i = 0; $i < length($expr); $i++)
  {
    if (substr($expr, $i, 1) eq '(')
    {
      push(@stk, $i);
      next;
    }
    if (substr($expr, $i, 1) eq ')')
    {
      if (scalar(@stk) == 0)
      {
        return undef;
      }
      $matching_parens[pop(@stk)] = $i;
      next;
    }
  }
  if (scalar(@stk) > 0)
  {
    return undef;
  }
  return \@matching_parens;
}

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

у перла есть рекурсивные regexp, это я как незнающий перла утверждаю.

wfrr ★★☆
()

Кхм... рискну показаться нескромным... Есть язык который умеет это делать просто и непринужденно... Не... Я лучше промолчу :) Там вверху про него тема есть :))

cathode
()

хммм, а в чём проблема ?

$ echo "(текст)(в)(((скобках)))" | perl -ne 'while (/\(([^()]+)\)/g) { print "$1\n"; }'
текст
в
скобках

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.