Help us understand the problem. What is going on with this article?

Tclで文字列置換

More than 3 years have passed since last update.

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

対応バージョン

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はマッチした部分全体が入ることに注意 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away