正则表达式用文字替换部分查询字符串

时间:2012-12-14 22:12:55

标签: c# .net regex vb.net

我有一个小问题,我在.Net应用程序中传递了几个SQL Server Like查询(我无法控制),我需要转义一些字符才能使它们成为文字对于数据库。

例如,假设我尝试查询的字段类似于:

This_is [a] long_text field with [literal] characters in it

我的查询看起来像这样:

SELECT * FROM [MyTable] where [MyField] Like 'This_% [literal]%'

现在,应该获取该数据,挑战在于SQL Server不会将_[字符视为字面字符,所以我必须将我的查询更新为:

SELECT * FROM [MyTable] where [MyField] Like 'This[_]% [[]literal]%'

然后它有效。


所以,我的问题是我想编写一个VB.Net函数,它使用RegEx查找语句的Like部分,然后替换字符。

有些事情:

Public Function ConvertQuery(strSQL as string)

... Some kind of Regex that searches for the word "Like" 
    and then takes everytihng between the 2 "'" characters
    Then replaces the "_" with "[_]" and "[" with "[[]"

Return ChangedString
End Function

我知道我给出了非常糟糕的细节,我知道我想要什么,我只是无法弄清楚如何使用RegEx。

另外,如果有一种更聪明的方法可以使用SQL Server Like声明执行此操作,也请告诉我!!!

谢谢!

1 个答案:

答案 0 :(得分:0)

看到C#标签,我认为您可以在C#中找到答案。

string input = "This_is [a] long_text field with [literal] characters in it";
var output = Regex.Replace(input, @"[_\[]","[$0]");

修改

string input = "SELECT * FROM [MyTable] where [MyField] Like 'This_% [literal]'";
var output = Regex.Replace(input, @"(?<=Like[ ]*\'.+?)[_\[]", "[$0]");