LINUX.ORG.RU
Ответ на: комментарий от Anoxemian

>/\((.*?)+\)/

Любого уровня вложенности.

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

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;
}

это на перле.  Если выражение не валидно -- вернет undef.  Иначе -- массив -- если в позиции i стоит открывающая скобка, то в массиве в этой же позиции стоит индекс закрывающей скобки.

dilmah ★★★★★
()

А это уже не описывается регулярной грамматикой, поэтому регулярное выражение составить не получится.

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

Мне нужно не это. Мне нужно иметь возможность разбирать строку, содержащее описанное выражение, как это делает обычные регеспы. То есть я задаю шаблон, содержащий подшаблон выражения и другие подшаблоны, для строки, и происходит разбор строки с запоминанием значений подшаблонов и выдачей чего-то вроде v1=substr1, v2=substr2..., где v1 - подшаблон, а substr[i] - значение этого подшаблона.

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

> не бывает такого..

Бывает, если регулярные выражения - перловые. ;) Пример у Фридла в 7-й главе.

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

Только в перле не регулярные выражения в их классическом смысле.

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