首頁  >  文章  >  後端開發  >  Scintilla使用指南(3) - 搜尋與替換

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

黄舟
黄舟原創
2017-01-17 10:30:242192瀏覽

Scintilla提供了搜尋和取代功能,它可以進行普通查找和正規表示式查找。 Scintilla的正規表示式,只提供了很有限的一些基本功能。
進行文字搜尋時,需設定搜尋標誌:

搜尋標誌                          說明FIND_WHOLEWORD   配對整個單選
   

SCFIND_WORDSTART   配對單字開始
   

SCFIND_REGEXP   正規表示式相符
SCFIND_POSIX   POSIX相容模式的正規表示式配對(如使用(*)而非/(*/))

   


在非正規表示式模式下,當end小於start時,則可向上反向搜尋;在正規表示式模式下,只能向下正向搜尋。

在正規表示式中,有一些特殊字元:


字元   說明

   

.   符合任一字元

   
/( 
   

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

/    

/>   匹配單詞結束
   

/x   x將被解釋為普通字符,例如:/[被解釋為字符[
   

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

[^…]   匹配不在[]中的任何一個字元
$   配對行結束

   


*   配對0次或多次

   


+   配對1次或多次

健康f)

根據搜尋標誌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_SEARCHANCHOR, 0, 0);

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)。在非正規表示式模式下,你可以設定起始位置大於結束位置,進行反向搜尋。
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。替換文字後,遊標將位於替換文字靠近文件開始的一邊。
如果要刪除一段文本,可以用空字串進行替換。

SCI_REPLACETARGETRE

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

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


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn