匹配c#中的正则表达式检查交叉连接查询

Posted

技术标签:

【中文标题】匹配c#中的正则表达式检查交叉连接查询【英文标题】:Matching the regular expression in c# to check cross join query 【发布时间】: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#中的交叉连接

【问题讨论】:

Parsing SQL code in C#的可能重复 【参考方案1】:

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

\from\s\t1(.*)\,\t2
\f 是 form-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 的问题,而不是答案。

以上是关于匹配c#中的正则表达式检查交叉连接查询的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用正则表达式匹配 a^n b^n c^n(例如“aaabbbccc”)

使用正则表达式从 C# 中的 SQL 语句中查找 SQL 函数

正则表达式与 C# 中的 OR 条件最长匹配

正则表达式匹配 C# 中的 Json 数组元素

C#中的正则匹配和文本处理

如何使用正则表达式匹配四个数字字段或文本字符串