3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tclで文字列置換

Posted at

いざ使おうとすると忘れてることが多いので。

#対応バージョン

Tcl 8.4.1

#正規表現(regsub)による置換

regsub ?オプション? パターン 元の文字列 置換後の文字列

##よく使うオプション

オプション 内容
-all マッチした部分全て置換
-nocase 大文字小文字を無視
-line 改行コードを認識する

##応用

置換後の文字列に、パターンでマッチした文字を使用した場合、¥+数字 (¥1等)が利用出来る

例えば、"ping <10.0.0.1-10.255.255.254>"を"ping 10.0.0.1"に置き換えたい場合は、下記のようにする。1

regsub {<((¥d{1,3}¥.){3}¥d{1,3})-(¥d{1,3}¥.){3}¥d{1,3}>} "ping <10.0.0.1-10.255.255.254>" {¥1}

#stringによる置換(位置指定)

string replace 元の文字列 開始位置 終了位置 置換後の文字列

開始位置から終了位置までの部分を「置換後の文字列」で置き換える。

#stringによる置換(複数箇所)

stirngを使って、複数の文字列を置換することもできる。

string map 置換する文字の配列 元の文字列

「置換する文字の配列」は、置換対象の文字列をキー、置換後の文字列を値とするKey-Valueペア。

例えば、「2015」を「2016」に、「Summer」を「Spring」に置き換える場合は、以下のようになる。

string map {2015 2016 Summer Spring} "ABC 2015 Summer coming soon."

とりあえず、この3種類を押さえておけば、大抵なんとかなる。

しかし、Tclの配列だろうと、文字列だろうと、表現がほぼ同じってのは便利なんだか、不便なんだか。。。

  1. ¥0はマッチした部分全体が入ることに注意

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?