替换为正则表达式无法正常工作

时间:2011-11-16 15:31:39

标签: c# regex

我想替换像这样的查询字符串:

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

SELECT X FROM table....

这应该很容易,我得到正则表达式取代按预期工作,但我不能让我的表达正确。 这就是我所拥有的:

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

它在我试过的在线评估器中也不起作用,但我不知道它必须如何。我如何在那里获得修饰符?我认为它应该是不合适的。

我知道这整件事似乎毫无用处,但这正是我想要和需要做的事情。

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

你想:

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

注意顺序。和*。

*基本上是它所遵循的任何字符或组的修饰符,因此在你的字母或字母T中匹配0或更多,而不是任何字符的0或更多。