我有一个程序通过SQL语句,用空格标识组件部分。例如: -
SELECT * FROM tblSales WHERE CustomerID=10 AND Year=2011
将产生以下作为单独的组件: -
“SELECT”,“*”,“FROM”,“tblSales”,“WHERE”,“CustomerID = 10”,“AND”和“Year = 2011”
我遇到的问题是在值中使用空格,例如: -
SELECT * FROM tblSales WHERE CustomerNameID='Test Company' AND Year=2011
使用相同的空间分隔逻辑,这将产生以下组件: -
“SELECT,”*“,”FROM“,”tblSales“,”WHERE“,”CustomerID ='Test“,”Company“,”AND“和”Year = 2011“。
即“测试”与“测试”之间的空间。 “公司”使其被视为两个独立的组成部分。
问题是,是否可以通过RegEx.Replace用另一个字符替换引号之间的空格,同时保留字符串中的所有其他空格?
肖恩。
答案 0 :(得分:1)
假设您没有任何转义引号,您只需检查您正在查看的空格是否后跟偶数引号(这意味着它在字符串之外)。
所以
splitArray = Regex.Split(subjectString, " (?=(?:[^']*'[^']*')*[^']*$)");
为您提供所需的结果。
作为一个冗长的正则表达式:
[ ] # Match a space
(?= # only if it's followed by...
(?: # This subregex:
[^']*' # any number of non-quote characters, followed by a quote
[^']*' # same again (to ensure even number of quotes)
)* # zero or more times.
[^']* # and any number of non-quote characters until...
$ # the end of the string.
) # End of lookahead.
答案 1 :(得分:1)
可能?也许。也许不吧。当然不是微不足道的。使用正则表达式解析SQL几乎与parsing HTML with regexes一样糟糕,或者可能更糟糕......
您可能希望poke around SO并寻找其他尝试解析SQL的人......