Scintilla使用指南(3) - 搜尋和替換

來源:互聯網
上載者:User
Scintilla提供了搜尋和替換功能,它可以進行普通尋找和Regex尋找。Scintilla的Regex,只提供了很有限的一些準系統。
在進行文本搜尋時,需要設定搜尋標誌:

搜尋標誌 說明

SCFIND_MATCHCASE 匹配大小寫

SCFIND_WHOLEWORD 匹配整個單選

SCFIND_WORDSTART 匹配單詞開始

SCFIND_REGEXP Regex匹配

SCFIND_POSIX POSIX相容模式的Regex匹配(如使用(*)而不是/(*/))

在非Regex模式下,當end小於start時,可以向上反向搜尋;在Regex模式下,只能向下正向搜尋。
在Regex中,有一些特殊字元:

字元 說明

. 匹配任一字元

/( 分組匹配開始標記

/) 分組匹配結束標記

/n n取值1 – 9,表示分組匹配的結果

/< 匹配單詞開始

/> 匹配單詞結束

/x x將被解釋為一般字元,例如:/[被解釋為字元[

[…] 匹配[]中的任一字元,如[a-zA-Z]匹配任一字母

[^…] 匹配不在[]中的任一字元

^ 匹配行開始

$ 匹配行結束

* 匹配0次或多次

+ 匹配1次或多次

SCI_FINDTEXT

SCI_FINDTEXT(int flags, TextToFind *ttf)
根據搜尋標誌flags搜尋文本。如果找到,返回匹配文本的開始位置,並設定ttf.chrgText.cpMin和ttf.chrgText.cpMax為匹配文本的開始位置和結束位置,否則返回-1。SCI_FINDTEXT不會改變當前的選擇資訊。

int flags = SCFIND_MATCHCASE | SCFIND_WHOLEWORD;TextToFind ttf;ttf.chrg.cpMin = 0;ttf.chrg.cpMax = SendMessage(SCI_GETLENGTH, 0, 0);ttf.lpstrText = "search text";int pos = SendMessage(SCI_FINDTEXT, flags, (LPARAM)&ttf);if (-1 != pos){...}

SCI_SEARCHANCHOR

SCI_SEARCHANCHOR
設定搜尋anchor位置為當前選擇資訊中靠近文檔開始的位置,返回TRUE(1)。這個訊息,通常用在調用SCI_SEARCHNEXT或SCI_SEARCHPREV之前。如果宏記錄功能開啟,SCI_SEARCHANCHOR訊息將會觸發SCN_MACRORECORD事件通知。

int flags = SCFIND_MATCHCASE | SCFIND_WHOLEWORD;
char *chText = "search text";

SendMessage(SCI_SEARCHANCHOR, 0, 0);
SendMessage(SCI_SEARCHNEXT, flags, (LPARAM)chText);

SCI_SEARCHNEXT

SCI_SEARCHNEXT(int searchFlags, const char *text)
從anchor位置向下開始搜尋指定文本(結束位置為文檔結尾),如果找到,選中匹配文本,返回匹配文本的開始位置,否則返回-1。在使用SCI_SEARCHNEXT之前,通常會調用SCI_SEARCHANCHOR設定anchor位置。SCI_SEARCHNEXT訊息不會導致視圖發生滾動,並且游標處於靠近文檔開始的一邊。如果宏記錄功能開啟,SCI_SEARCHNEXT訊息將會觸發SCN_MACRORECORD事件通知。

SCI_SEARCHPREV

SCI_SEARCHPREV(int searchFlags, const char *text)
從anchor位置向上開始搜尋指定文本(結束位置為文檔開始),如果找到,選中匹配文本,返回匹配文本的開始位置,否則返回-1。在使用SCI_SEARCHPREV之前,通常會調用SCI_SEARCHANCHOR設定anchor位置。SCI_SEARCHPREV訊息不會導致視圖發生滾動,並且游標處於靠近文檔開始的一邊。如果宏記錄功能開啟,SCI_SEARCHPREV訊息將會觸發SCN_MACRORECORD事件通知。

SCI_SETTARGETSTART, SCI_GETTARGETSTART

1) SCI_SETTARGETSTART(int pos)
設定搜尋開始位置,返回TRUE(1)。在非Regex模式下,你可以設定開始位置大於結束位置,進行反向搜尋。
2) SCI_GETTARGETSTART
返回搜尋開始位置。

SCI_SETTARGETEND, SCI_GETTARGETEND

1) SCI_SETTARGETEND(int pos)
設定搜尋結束位置,返回TRUE(1)。
2) SCI_GETTARGETEND
返回搜尋結束位置。

SCI_TARGETFROMSELECTION

SCI_TARGETFROMSELECTION
根據當前選擇訊息,設定搜尋開始位置和結束位置,返回TRUE(1)。

SCI_SETSEARCHFLAGS, SCI_GETSEARCHFLAGS

1) SCI_SETSEARCHFLAGS(int searchFlags)
設定搜尋標誌,返回TRUE(1)。
2) SCI_GETSEARCHFLAGS
返回搜尋標誌。

SCI_SEARCHINTARGET

SCI_SEARCHINTARGET(int length, const char *text)
根據SCI_SETTARGETSTART、SCI_SETTARGETEND、SCI_SETSEARCHFLAGS等設定的資訊,搜尋指定文本。如果找到,返回匹配文本的開始位置,否則返回-1。text不必以0終結符結尾,其搜尋文本長度由參數length指定。

SCI_REPLACETARGET

SCI_REPLACETARGET(int length, const char *text)
根據SCI_SETTARGETSTART、SCI_SETTARGETEND設定的資訊,替換文本。如果length為-1,則text是以0終結符結尾的常量字串,返回text的長度;否則,text不必以0終結符結尾,替換文本長度由參數length指定,返回length。替換文本後,游標將位於替換文本靠近文檔開始的一邊。
如果要刪除一段文本,可以用Null 字元串進行替換。

SCI_REPLACETARGETRE

SCI_REPLACETARGETRE(int length, const char *text)
與SCI_REPLACETARGET相似,不同的是使用Regex替換文本。在text中,可以包含/1 - /9這樣的字元序列,最後產生的替換文本中,將用上一次Regex搜尋匹配結果,替換/1 - /9這樣的字元序列。

以上就是Scintilla使用指南(3) - 搜尋和替換的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.