Страница: 1 |
Страница: 1 |
Вопрос: регулярные выражения
Добавлено: 14.08.07 18:07
Автор вопроса: Neco | Web-сайт:
хочу сделать анализ sql-запросов, для этого использую регулярки.
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
Хм.. Сорри. Потом уже присмотрелся и понял, что наборы заключены в скобки. А интересно, без * работает? В смысле, (...)|(...), а не (...)*|(...)*