1. 程式人生 > >tcl/tk參考——字串操作regsub

tcl/tk參考——字串操作regsub

.

.

名稱

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
-lineanchor,與(?n)嵌入選項相同(參見re_syntax幫助手冊)。
使[^.不會匹配換行符,與(?p)嵌入選項相同(參見re_syntax幫助手冊)。
使^$的行為改變為面向行的方式,與(?w)嵌入選項相同(參見re_syntax幫助手冊)。
是大寫字母也被當作小寫來處理,相當於不區分大小寫字元。
指定了開始匹配的索引位置,當使用了這個可選項,^不會從字串的開頭匹配,而是從指定的索引位置開始匹配。
--
指示可選項的結束,這個可選項主要用於exp以-開頭的時候。

如果提供了varName,這個命令將返回匹配和替換的數量,不提供則返回替換後的字串,參見命令以瞭解更多資訊。

示例

使用bar替代字串中所有的foo
regsub -all {/<foo/>} $string bar string

使用雙引號把匹配的字串括起來:

regsub -nocase {/<interesting/>} $string {"&"} string

通過regsubsubst命令把所有非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]]