Regex Match с вложенными паренами - PullRequest
2 голосов
/ 22 марта 2011

ОК,

Я не знаю, возможно ли написать это регулярное выражение, поэтому я собираюсь начать с просьбы о помощи - пока у меня нет успеха.

исходная строка:

,convert(varchar(8000), lt.text) as reason

желаемое совпадение:

convert(varchar(8000), lt.text)

предположения

  • оператор начинается с запятой (за пределами скобок)
  • состояние закончится "as"

это регулярное выражение, с которого я начинаю:

\(.+\)

Спасибо

Ответы [ 4 ]

1 голос
/ 02 апреля 2011

Bar Kiers - это правильно, неспособность справиться с «произвольным количеством вложений», является коренной причиной как моей памяти, так и причины того, почему я не смог выполнить то, что хотел.

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

0 голосов
/ 22 марта 2011
^,(.+\)) as [a-z]+$

Я включаю «причину» в [az] +.

Я предлагаю вам использовать опцию RightToLeft, если она у вас есть.Это ускорит регулярное выражение.И не забудьте убежать от \, если этого требует ваш язык.

0 голосов
/ 22 марта 2011

Я предполагаю синтаксис PCRE здесь. Если вы можете гарантировать, что символы «как» не будут отображаться в скобках, то что-то вроде этого должно работать:

{,(.*) as }

Если вы не можете гарантировать, что «as» не будет отображаться в скобках, вам нужно определить некоторые другие условия, которые будут выполнены. Например, если строка всегда заканчивается после «как», что-то вроде этого будет работать:

{,(.*) as \S+$}

Или вы можете использовать настоящий парсер, который может сохранять контекст (количество паренов).

0 голосов
/ 22 марта 2011

Используйте следующее регулярное выражение:

^ \, (? [\ s \ S] *?) Как

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...