匹配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”)