【问题标题】:Matching the regular expression in c# to check cross join query匹配c#中的正则表达式检查交叉连接查询
【发布时间】:2016-04-02 02:03:17
【问题描述】:

我正在尝试通过查询表达式检查交叉连接。例如我有以下查询。

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#中的交叉连接

【问题讨论】:

标签: c# sql regex


【解决方案1】:

让我们分析一下你的正则表达式的含义:

\from\s\t1(.*)\,\t2
  • \fform-feed character
  • rom - rom
  • \s - 一个空格
  • \t - 标签
  • 1 - 1
  • (.*) - 尽可能多的字符
  • \, - 逗号
  • \t - 另一个标签
  • 2 - 2

换句话说,你添加了一堆你不需要的转义符并改变了你的正则表达式的含义。

from\st1(.*)\,t2


另请注意,您的查询中有随机的"
"select t1.c1, t2.c2" from t1,t2"
                    ^

【讨论】:

  • 请注意,(.*) 使正则表达式实际上毫无用处。你可能想在这里\s*。 .* 将确保YOUR QUERY ... ORDER BY t1.c1 ,t2.c2 也将被检测为交叉连接。
  • 正则表达式并不是验证交叉连接存在的好主意。反例:1. 内连接select * from t1, t2 where t1.id = t2.id 2. 交叉连接select * from t1 cross join t2 3. 有效交叉连接select * from t1 inner join t2 on 1 = 1
  • @ASh,这个评论应该是 OP 的问题,而不是答案。
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2019-07-02
  • 2017-06-18
  • 2012-12-16
  • 2018-07-14
  • 2013-10-14
  • 1970-01-01
相关资源
最近更新 更多