2015-12-28 3 views
0

Я пытаюсь проверить перекрестное соединение по выражению запроса. Например, у меня есть следующий запрос.Соответствие регулярного выражения в C# для проверки запроса перекрестного соединения

string query="select t1.c1, t2.c2" from t1,t2"; 

Этот запрос будет пересекать как таблицы t1, так и t2. я попробовал следующий способ проверить.

string query="select t1.c1, t2.c2" from t1,t2"; 

var rx = new Regex(@"\from\s\t1(.*)\,\t2"); 
if(rx.Match(query)){return "cross-join"} 

но мой регулярное выражение пойман ошибка. Я не мог понять, где я ошибся, потому что я новичок в регулярном выражении в C#. Есть ли другой способ проверить перекрестное соединение в C#

+0

Возможный дубликат [PARSING кода SQL в C#] (http://stackoverflow.com/questions/589096/parsing -sql-code-in-c-sharp) – ASh

ответ

1

Давайте проанализируем, что означает, что ваше регулярное выражение:

\from\s\t1(.*)\,\t2 
  • \f является form-feed character
  • rom - rom
  • \s - один пробел
  • \t - tab
  • 1 - 1
  • (.*) - столько символов, сколько возможно
  • \, - запятая
  • \t - другая вкладка
  • 2 - 2

Она Другие слова, вы добавили кучу побегов, что вам не нужно и изменить значение вашего регулярного выражения.

from\st1(.*)\,t2 


Также обратите внимание, что у вас есть в запросах случайных ":

"select t1.c1, t2.c2" from t1,t2" 
        ^
+0

Обратите внимание, что '(. *)' делает регулярное выражение практически бесполезным. Вы, вероятно, хотите '\ s * 'здесь. . * будет гарантировать, что «ВАШ ЗАПРОС ... ORDER BY t1.c1, t2.c2» также будет обнаружен как перекрестное соединение. – jessehouwing

+0

regex вряд ли является хорошей идеей для подтверждения присутствия перекрестного соединения. Примеры: 1. внутреннее объединение 'select * from t1, t2, где t1.id = t2.id' 2.cross join' select * from t1 cross join t2' 3. cross join эффективно 'select * from t1 inner join t2 on 1 = 1' – ASh

+0

@ASh, этот комментарий должен быть в вопросе OP, а не в ответе. – ndn