我的完整问题标题太长了,但应该在这里问:
如何在字符串中找到特定子字符串的所有实例,以确定可能位于子字符串两侧的空格和特殊字符
我的意思是这个。我正在VB.Net中编写一个SQL代码格式化帮助程序。当我跟进真正的写作SQL时,这个程序将有所帮助。例如是(请在这里忽略语法失败,我不擅长在SQL中编写错误的代码):
if exists(
select *
from dbo.table
where field1 = (if exists (select field1
from dbo.table1
where field2 = '123')
select field1 from table2)
我的计划仍处于早期阶段。我已经确定了大多数关键字,并编写了将它们放入正确的大小写格式的代码。因此,在上面的错误代码示例中,所有选择都将是Select。为此,我创建了一个数组形式的关键字列表,并在以下函数中使用此数组:
Private Function FindAndReplace(ByVal findWhat As String, _
ByVal replaceWith As String, ByVal focusLine As String) As String
focusLine = Microsoft.VisualBasic.Strings.Replace(focusLine, findWhat, _
replaceWith, 1, -1, Constants.vbTextCompare)
Return focusLine
End Function
好消息是这对Select这样的词很有效。像If,Go,On和End这样的词语更具挑战性。如果我有单词Send,它将用单词SEnd替换它,因为End是一个关键字。在许多这样的例子中,我可以通过在较大的单词之前放置较小的单词来解释这一点。我已将Send作为关键字添加,因为该字出现在我们系统上的用户消息中。
我似乎无法解释像On,If或Go这样的词。我考虑过搜索“Go”,“On”,“)Go”,“On”,“等等,但有时Go会成为第一个单词......或者唯一的单词。
我需要的是一个VB.Net方法,用于搜索字符串以查找给定子字符串的所有实例(例如If)。我想我会检查它是否是字符串中的第一个单词,或者看它是否被空格或特殊字符的任意组合所包围(或者没有被其他字母和下划线包围等)。我会更新符合我要求的那些,并让其他人独自一人。
我在如何做到这一点上空白,我真的可以使用一些帮助。
答案 0 :(得分:1)
我正在编写SQL代码格式化帮助程序
我建议从现有的SQL解析器开始。
Pete Sestoft的优秀Programming Language Concepts book引入了解析基础知识,包括在第3章中编写针对Micro-SQL的Lexer和Parser规范。
开源Irony project包含SQL grammar样本。
使用您最喜爱的搜索引擎查找其他搜索引擎。
我需要的是一个VB.Net方法,用于搜索字符串以查找给定子字符串的所有实例
有很多方法可以实现这一目标:
使用选项2,您可以处理引用的字符串并为每个单词维护一个索引,这里是F#中的一个简短示例:http://fssnip.net/f6