Perlの正規表現を用いた置換

文:Nick Gibson(Builder AU) 翻訳校正:村上雅章・野崎裕子
2007-12-27 08:00:00
  • このエントリーをはてなブックマークに追加

 前回の記事では、Perlのマッチ演算子を紹介し、正規表現を用いてテキスト中から特定パターンを見つけ出す方法について解説した。今回は、テキストの変更や置換、変換を行う正規表現演算子について解説している。

 まず、正規表現の利用方法のうちで最も有益であり、かつ最もよく利用されている置換について解説したい。置換の最も簡単な形式は以下のようなものである。

$string =~ s/a/b/;

 これによって$string中の最初の"a"が"b"で置き換えられる。すべての"a"を"b"で置き換えたい場合、以下のように、最後に"g"(グローバルを意味する)を追加するだけでよい。

$string =~ s/a/b/g;

 マッチで使用できる特殊演算子は置換においてもすべて使用することができる。例えば、前回の記事で用いた電話番号の例において、数字以外のすべての文字を取り除くことによって、ユーザーの入力に関わる問題を減らしたいとしよう。その場合には、以下のようなコードを記述することができる。

$string =~ s/[^0-9]//g;

 これによって、最初の式にマッチした文字すべて(すなわち数字以外のすべての文字)が2番目の式(すなわち空文字列)で置き換えられる。しかし、すべての母音を大文字にしたいからといって、以下のようなコードを記述することはできない。

$string =~ s/[aeiou]/[AEIOU]/g;

 ブラケット記法では正規表現中の何番目の文字がマッチしたのかを知ることはできないため、2番目の式内ではどの文字で置換するかを指定できないのである。そもそも、2番目の式内では正規表現を使用することができないのだ。このコードでは実際には、各母音が"[AEIOU]"という文字列で置き換えられる。小文字で記述されているすべての母音をその大文字で置き換えるには別の方法、すなわち変換ツールを用いて以下のように記述することになる。

$string =~ tr/aeiou/AEIOU/;

 変換は各文字ごとに行われる。すなわち、最初のリストの各項目が2番目のリストの同じ位置にある文字で置き換えられるわけだ。便利なことに、2番目のリストはラップアラウンドするようになっているため、以下のようなコードを記述することもできる。

$string =~ tr/[1-9]/ /;
  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]