Regexp
От: server_mouse Беларусь about:blank
Дата: 20.06.08 10:49
Оценка:
Ребята, помогите написать регулярное выражение, а то я что-то туплю.
Есть sql-скрипт:
-- header SP ....
-- ..........
AS
BEGIN
 -- Тело процедуры
END
GO


Из него хочу вытянуть
AS
BEGIN
 -- Тело процедуры
END


Пытаюсь использовать такое выражение: "(AS\nBEGIN[.\n]*END)\nGO".
Т.е. группа в скобочках и была бы столь вожделенным телом, но... match.Success==false, т.е. не находится НИ ОДНОГО совпадения.
Почему???? Как сделать???
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re: Regexp
От: SlaVVVa Россия  
Дата: 20.06.08 11:26
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Пытаюсь использовать такое выражение: "(AS\nBEGIN[.\n]*END)\nGO".

_>Т.е. группа в скобочках и была бы столь вожделенным телом, но... match.Success==false, т.е. не находится НИ ОДНОГО совпадения.
_>Почему???? Как сделать???

а если так:
(AS\r\nBEGIN(.|(\r\n))*\r\nEND)\r\nGO
Поймете смысл — найдутся слова.
Катон.
Re[2]: Regexp
От: server_mouse Беларусь about:blank
Дата: 20.06.08 12:03
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>а если так:

SVV>(AS\r\nBEGIN(.|(\r\n))*\r\nEND)\r\nGO

Неа. Даже так
AS\r\nBEGIN(.|(\r\n))*
или
AS\nBEGIN[.\n]*

находит только
AS
BEGIN


т.е. не срабатывает жадность...

ЗЫ файлы в UNICODE, но вроде это без разницы должно быть...
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[3]: Regexp
От: SlaVVVa Россия  
Дата: 20.06.08 13:08
Оценка: 3 (1)
Здравствуйте, server_mouse, Вы писали:

_>т.е. не срабатывает жадность...



using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = @"
AS
BEGIN
    -- Тело процедуры 1
    -- Тело процедуры 2
END
GO";

            string pattern = @"(AS\r\nBEGIN(?<body>(.|(\r\n))*)\r\nEND)\r\nGO";

            Match m = Regex.Match(text, pattern, RegexOptions.Multiline);

            if (m.Success)
                Console.WriteLine(m.Groups["body"]);
        }
    }
}


а у меня все находит.
Поймете смысл — найдутся слова.
Катон.
Re: Regexp
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.06.08 14:51
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Ребята, помогите написать регулярное выражение, а то я что-то туплю.

_>Есть sql-скрипт:
_>
_>-- header SP ....
_>-- ..........
_>AS
_>BEGIN
_> -- Тело процедуры
_>END
_>GO
_>


_>Из него хочу вытянуть

_>
_>AS
_>BEGIN
_> -- Тело процедуры
_>END
_>


Эта задача скорее всего при помощи регулярных грамматик не решается.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1090 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[2]: Regexp
От: Овощ http://www.google.com
Дата: 20.06.08 15:12
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Эта задача скорее всего при помощи регулярных грамматик не решается.


Если вы имеете в виду трудности с распознаванием вложенных друг в друга конструкций типа BEGIN/END (и прочих вложенных скобок и т.п.), то по-моему это можно решить посредством механизма Balancing Group Definition (есть реализация в дотнетовских регекспах). Хотя да, вы правы, сама грамматика будет уже не регулярной.
Re[3]: Regexp
От: vdimas Россия  
Дата: 20.06.08 17:48
Оценка:
Здравствуйте, Овощ, Вы писали:


О>Если вы имеете в виду трудности с распознаванием вложенных друг в друга конструкций типа BEGIN/END (и прочих вложенных скобок и т.п.), то по-моему это можно решить посредством механизма Balancing Group Definition (есть реализация в дотнетовских регекспах). Хотя да, вы правы, сама грамматика будет уже не регулярной.


Грамматика регэкспов, не смотря на название, выходит за рамки регулярной.
Re[4]: Regexp
От: server_mouse Беларусь about:blank
Дата: 23.06.08 07:31
Оценка:
Здравствуйте, SlaVVVa, Вы писали:

SVV>а у меня все находит.


Чорт. Точно. Но срабатывает только из .NET. Из текстового редактора, где я обычно проверяю не работает.
Спасибо.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.