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)!