Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: регулярные выражения Добавлено: 14.08.07 18:07  

Автор вопроса:  Neco | Web-сайт: neco.pisem.net | ICQ: 247906854 
хочу сделать анализ sql-запросов, для этого использую регулярки.
            Regex r_own = new Regex(@"(\s*(select)\s*([\w\d\s\*,\.]+?)\s*(from)\s((\w+)\.)*(\w+)(\s(\w+))*\s*(;)\s*)*|(\s*(insert\s+into)\s+((\w+)\.)*(\w+)\s*(\([\w\d\s,]+\))*\s*(values)\s*(\([\w\d\s,:']+\))\s*(;)\s*)*", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            Regex r_select = new Regex(@"\s*(select)\s*([\w\d\s\*,\.]+?)\s*(from)\s((\w+)\.)*(\w+)(\s(\w+))*\s*(;)\s*", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            Regex r_insert = new Regex(@"\s*(insert\s+into)\s+((\w+)\.)*(\w+)\s*(\([\w\d\s,]+\))*\s*(values)\s*(\([\w\d\s,:']+\))\s*(;)\s*", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            string text = "insert into man.fuck (c1,c2,c3,c4) values ('v1',v2,v3,v4);select id1 my_id,name from db.town; select * from dd.my_scheme_table;select * from diid good_name; insert into ggg values (:v1,:v2,:v3); select * from db.kkk;";
            Match m = r_select.Match(text);
            m = m.NextMatch();
            m = m.NextMatch();
            m = m.NextMatch();
            m = r_insert.Match(text);
            m = m.NextMatch();
            m = m.NextMatch();
            m = r_own.Match(text);
            m = m.NextMatch();
            m = m.NextMatch();


r_select и r_insert отдельно работают, а вместе (в r_own) что-то не хотят

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #1 Добавлено: 17.08.07 12:47
Ога, я тоже попадался :)) В MSDN про это написано где-то - лень искать, если честно :)

Суть написанного была простая: просто если в выражении с помощью | отделяются не символы, а большие наборы, то наборы следует брать в скобки.

Ответить

Номер ответа: 2
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #2 Добавлено: 17.08.07 12:52
Хм.. Сорри. Потом уже присмотрелся и понял, что наборы заключены в скобки. А интересно, без * работает? В смысле, (...)|(...), а не (...)*|(...)*

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам