簡體   English   中英

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

[英]How do I find specific substring in a string

我的完整問題標題太長,但應在此處提出以下問題:

如何在字符串中查找特定子字符串的所有實例,以考慮空格和特殊字符可能位於子字符串的兩側

我的意思是這個。 我正在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)

我的程序仍處於早期階段。 我已經確定了大多數關鍵字,並編寫了將其設置為正確大小寫格式的代碼。 因此,在上面的錯誤代碼示例中,所有選擇都將是“選擇”。 為此,我創建了一個數組形式的關鍵字列表,並在以下函數中使用此數組:

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)。 我當時想檢查一下它是否是字符串中的第一個單詞,或者查看它是否被空格或特殊字符的任何組合包圍(或不被其他字母和下划線等包圍)。 我會更新那些滿足我要求的內容,而讓其他人呆在一起。

我在如何執行此操作上處於空白狀態,我真的可以使用一些幫助。

我正在編寫一個SQL代碼格式化幫助程序

我建議從現有的SQL解析器開始。

皮特·塞斯托夫特(Pete Sestoft)出色的《 編程語言概念》一書介紹了解析基礎,包括在第3章中編寫了Micro-SQL的Lexer和Parser規范。

開源的Irony項目包括一個SQL語法示例。

使用您喜歡的搜索引擎查找其他人。

我需要的是一種VB.Net的方法,用於在字符串中搜索給定子字符串的所有實例

有多種方法可以實現此目的:

  1. 將字符串拆分為單詞,然后在這些單詞中搜索實例。
  2. 使用狀態機遍歷字符串,並在空格后檢查單詞。

使用選項2,您可以處理帶引號的字符串並為每個單詞維護索引,這是F#中的簡短示例: http : //fssnip.net/f6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM