2011-11-16 64 views
0

替换我想更换一个查询字符串是这样的:用正则表达式不工作

SELECT abc,def,ghi,jhk FROM table.... 

SELECT X FROM table.... 

这应该是很容易的,我得到的正则表达式替换按预期的方式工作,但我无法让我的表情正确。 这是我有:

rgx = new Regex("SELECT*.FROM"); 
data = rgx.Replace(data, "SELECT X FROM"); 

它还在网上评价我想是不行的,但我不知道它怎么会呢。我如何获得修改器?我认为这应该是不合理的。

我知道这整个事情似乎没用,但这正是我想要和需要做的。

回答

4

你混了*.

你也可能要在里面加一些空间,否则,正则表达式也将匹配SELECTFOOBARFROM

更多(假设C#的正则表达式支持非贪婪)我通过尾随?使通配符非贪婪。
现在你的正则表达式是贪婪的。因此,您的当前正则表达式将改变这一点:

SELECT Foo FROM Bar WHERE Baz IN (SELECT FooID FROM Bar WHERE Foo = 'Foo') 

成这样:

SELECT X FROM Bar WHERE Foo = 'Foo') 

而正确的结果会是这样的:

SELECT X FROM Bar WHERE Baz IN (SELECT X FROM Bar WHERE Foo = 'Foo') 

人机工程学,去与此相反:

rgx = new Regex("SELECT .*? FROM"); 
+0

啊想,它应该是ungreedy只是不知道该怎么办呢:)谢谢 – Flo

+0

+ 1对于一个非常透彻的分析(当然,正确的答案)。 :) – Chris

1

你想:

rgx = new Regex("SELECT.*FROM"); 

注意的顺序。和*。

的*基本上是什么在你的性格也遵循这样一群你匹配0个或多个字母T,而不是0或多个任意字符的改性剂。

+0

谢谢,快速回答,工作正常:)将在12日接受 – Flo