如何在字符串中找到特定的子字符串

时间:2014-03-24 20:33:39

标签: vb.net string replace substring

我的完整问题标题太长了,但应该在这里问:

如何在字符串中找到特定子字符串的所有实例,以确定可能位于子字符串两侧的空格和特殊字符

我的意思是这个。我正在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)。我想我会检查它是否是字符串中的第一个单词,或者看它是否被空格或特殊字符的任意组合所包围(或者没有被其他字母和下划线包围等)。我会更新符合我要求的那些,并让其他人独自一人。

我在如何做到这一点上空白,我真的可以使用一些帮助。

1 个答案:

答案 0 :(得分:1)

  

我正在编写SQL代码格式化帮助程序

我建议从现有的SQL解析器开始。

Pete Sestoft的优秀Programming Language Concepts book引入了解析基础知识,包括在第3章中编写针对Micro-SQL的Lexer和Parser规范。

开源Irony project包含SQL grammar样本。

使用您最喜爱的搜索引擎查找其他搜索引擎。

  

我需要的是一个VB.Net方法,用于搜索字符串以查找给定子字符串的所有实例

有很多方法可以实现这一目标:

  1. 将字符串拆分为单词,然后在实例中搜索这些单词。
  2. 使用状态机迭代字符串并检查空格后的单词。
  3. 使用选项2,您可以处理引用的字符串并为每个单词维护一个索引,这里是F#中的一个简短示例:http://fssnip.net/f6