文字列を置換しよう
前回までは、正規表現を使った検索をやってきましたが、今回は正規表現を使った置換をやります。
置換するときの文法は言語によって違いますが、ここではPerlの文法を用て「s/置換前/置換後/」と書きます。変数に対して置換をかけるときは「$x =~ s/置換前/置換後/」と書きます。
その他の言語の場合は、関数の引数として置換前と置換後の文字列を渡す場合が多いようです。VBでは Regular Expression というオブジェクトを使用して「regexp.Replace("置換前","置換後") 」と書きます。
置換の文法
置換するときに使う文法です。
正規表現 | 説明 | 使用例 | 例の説明 |
s/A/B/ | 最初に一致した文字列AをBに置換 | $x = 'AAA'; $x =~ s/A/B/; | $xは'BAA'となる |
s/A/B/i | 上記と同様だが、アルファベットの大文字と小文字を区別しない | $x = 'aaa'; $x =~ s/A/B/; | $xは'Baa'となる |
s/A/B/g | 文字列中の一致したすべての文字列AをBに置換 | $x = 'AAA'; $x =~ s/A/B/g; | $xは'BBB' となる |
s/(A)-(B)/$1+$2/ | AとBをそれぞれ$1と$2という変数に入れて後で参照する | $x = '12:34'; $x =~ s/(\d+):(\d+)/$1時$2分/; | $xは'12時34分'となる |
s/A//g | 文字列中の一致した文字列Aを消去 | $x = 'AAA'; $x =~ s/A//g; | $xは''となる |
後方参照について
後方参照とは、置換前の一部の文字列を( )でくくると、その文字列を置換後に$1,$2,$3...という文字で参照することを言います。
たとえば、以下のように使います。
1: $x = '0173123456';
2: $x =~ s/(\d\d\d\d)(\d\d)(\d\d\d\d)/$1-$2-$3/;
3: print $x;
> 0173-12-3456
このプログラムは、1行目では変数$xに'0173123456'を代入。2行目では$xの中身を置換。3行目では$xの内容を表示しています。
2行目の置換を詳しく説明すると、まず置換前の文字列に ( ) が3つ登場しています。これは、後方参照を3つ作ることを意味します。そして置換後では、$1,$2,$3 という変数で ( ) に一致した文字列を参照しています。( ) と $1,$2,$3 は前から順番に対応するので (\d\d\d\d) → $1, (\d\d) → $2, (\d\d\d\d) → $3 となります。
問題を解いてみよう
- HTML形式で書かれたテキストがあります。タグをすべて消去しなさい。タグ以外の文字は消してはいけません。
<HTML>
<BODY>
<H1>めんずらすぃホームページ</H1>
<P ALIGN="CENTER">ヨグキテケシタ。</P>
</BODY>
</HTML>
こたえ:[ s/<[^<>]+>//g ]
- IPアドレスが書かれたテキストがあります。IPアドレスの4つ目の項目を*で隠蔽しなさい。(例:192.168.10.*)
210.250.103.186
202.33.91.161
こたえ:[ s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.*/ ]
桁数を範囲指定して数字を検索する正規表現もあります。
|
|
1.正規表現とはなにか?
正規表現を簡単に説明すると?
2.正規表現を使う準備
まずはエディタの設定
3.正規表現サンプル集 【検索編】
検索で使える正規表現
4.正規表現サンプル集 【置換編】
置換で使える正規表現
5.正規表現のお勉強
├正規表現で検索
├少し高度な検索
├文字列置換
├最短一致について
└エスケープ文字のこと
上から順番にだんだん難しくなります
6.エディタの強調表示でテキストに色づけ
色つきで見やすくできます
7.プログラムで正規表現を使う
各種プログラム言語でも使えます
8.ナイスな記事集
ここよりスゴイ正規表現がある
|