tcl/tk參考——字串操作regsub
阿新 • • 發佈:2019-01-02
.
.
名稱
regsub - 基於正則表示式模式匹配完成替換操作語法
regsub ?switches? exp string subSpec ?varName?描述
這個命令對string進行正則表達匹配,然後把字串拷貝進入varName中,如果沒有varName則將字串返回。(正則表示式語法匹配描述在re_syntax中。)如果匹配成功,就把匹配的部分換成subSpec後再拷貝到varName中,如果subSpec包含"&"和"/0",將會替換為匹配的字串,如果包含"/n"將被替換為字模式匹配的字串,多新增一個反斜槓將會阻止解釋其去解釋"&"、"/0"、"/n"和"/",為了防止這些情況發生,把subSpec如果緊接著regexp的第一個變元以-開頭,那麼就會被當作可選項來處理,可以使用的選項如下:
- -all
- 在字串中符合使正則表示式的部分全部被匹配並且全部會被替換,沒有這個可選項就只有第一個匹配的字串會被替換。在-all選項下,所有匹配的字串都會分別根據匹配情況進行"&"和"/n"的替代。
- 使正則表示式使用擴充套件語法,空格鍵和註釋會被忽略,與指定了(?x)嵌入選項相同(參見re_syntax幫助手冊)。
- -line
- 換行符敏感。換行符是字串的結束符,如果使用了這個標誌位,[^和.不會匹配換行符,如果有換行,那麼^和$匹配一個空字串,這個標誌為相當於同時指定了-linestop
- 使[^和.不會匹配換行符,與(?p)嵌入選項相同(參見re_syntax幫助手冊)。
- 使^和$的行為改變為面向行的方式,與(?w)嵌入選項相同(參見re_syntax幫助手冊)。
- 是大寫字母也被當作小寫來處理,相當於不區分大小寫字元。
- 指定了開始匹配的索引位置,當使用了這個可選項,^不會從字串的開頭匹配,而是從指定的索引位置開始匹配。
- --
- 指示可選項的結束,這個可選項主要用於exp以-開頭的時候。
如果提供了varName,這個命令將返回匹配和替換的數量,不提供則返回替換後的字串,參見命令以瞭解更多資訊。
示例
使用bar替代字串中所有的foo:
regsub -all {/<foo/>} $string bar string
使用雙引號把匹配的字串括起來:
regsub -nocase {/<interesting/>} $string {"&"} string
通過regsub和subst命令把所有非ASCII和Tcl特殊意義的字元使用/u轉義:
# 這個正則表示式是所有“非法”字元的字符集 set RE {[][{};#///$/s/u0100-/uffff]} # 替換一箇中括號中的tcl命令 set substitution {[format ////u%04x [scan "//&" %c]]} # 將命令傳給subst使format命令得到替換 set quoted [subst [regsub -all $RE $string $substitution]]