我想替换像这样的查询字符串:
SELECT abc,def,ghi,jhk FROM table....
与
SELECT X FROM table....
这应该很容易,我得到正则表达式取代按预期工作,但我不能让我的表达正确。 这就是我所拥有的:
rgx = new Regex("SELECT*.FROM");
data = rgx.Replace(data, "SELECT X FROM");
它在我试过的在线评估器中也不起作用,但我不知道它必须如何。我如何在那里获得修饰符?我认为它应该是不合适的。
我知道这整件事似乎毫无用处,但这正是我想要和需要做的事情。
答案 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或更多。