Scintilla提供了搜尋和取代功能,它可以進行普通查找和正規表示式查找。 Scintilla的正規表示式,只提供了很有限的一些基本功能。
進行文字搜尋時,需設定搜尋標誌:
搜尋標誌 說明FIND_WHOLEWORD 配對整個單選
SCFIND_WORDSTART 配對單字開始
SCFIND_REGEXP 正規表示式相符
SCFIND_POSIX POSIX相容模式的正規表示式配對(如使用(*)而非/(*/))
在非正規表示式模式下,當end小於start時,則可向上反向搜尋;在正規表示式模式下,只能向下正向搜尋。
/(
/n n取值1 – 9,表示分組匹配的結果
/
/> 匹配單詞結束
/x x將被解釋為普通字符,例如:/[被解釋為字符[
[…] 匹配[]中的任一字符,如[a-zA-Z]匹配任一字母
[^…] 匹配不在[]中的任何一個字元
$ 配對行結束
* 配對0次或多次
+ 配對1次或多次
根據搜尋標誌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
設定搜尋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
從anchor位置向下開始搜尋指定文本(結束位置為文檔結尾),如果找到,選中匹配文本,返回匹配文本的開始位置,否則返回-1。在使用SCI_SEARCHNEXT之前,通常會呼叫SCI_SEARCHANCHOR設定anchor位置。 SCI_SEARCHNEXT訊息不會導致視圖發生捲動,且遊標處於靠近文件開始的一邊。如果巨集記錄功能開啟,SCI_SEARCHNEXT訊息將會觸發SCN_MACRORECORD事件通知。
SCI_SEARCHPREV
從anchor位置向上開始搜尋指定文字(結束位置為文件開始),如果找到,選取符合文本,則返回符合文字的開始位置,否則返回- 1。在使用SCI_SEARCHPREV之前,通常會呼叫SCI_SEARCHANCHOR設定anchor位置。 SCI_SEARCHPREV訊息不會導致視圖發生捲動,且遊標處於靠近文件開始的一邊。如果巨集記錄功能開啟,SCI_SEARCHPREV訊息將會觸發SCN_MACRORECORD事件通知。
SCI_SETTARGETSTART, SCI_GETTARGETSTART
設定搜尋開始位置,回到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)!