Perlはテキスト処理のための強力な機能を提供しており、その中心には正規表現を使った柔軟な文字列操作があります。特に、s///演算子を使った正規表現による置換は、Perlプログラミングにおいて非常によく使用されるテクニックの一つです。この記事では、s///演算子と正規表現を使った文字列の順番入れ替えの方法を紹介します。
サンプルコード
以下のサンプルコードは、文字列内のYYYY-MM-DD形式の日付をDD-MM-YYYY形式に置換します。
#!/usr/bin/perl
use strict;
use warnings;
# 元の文字列
my $string = "Today is 2024-02-23. Tomorrow will be 2024-02-24.";
# 置換前の文字列を表示
print "置換前の文字列: $string\n";
# 日付フォーマット YYYY-MM-DD を DD-MM-YYYY に置換 ★
$string =~ s/(\d{4})-(\d{2})-(\d{2})/$3-$2-$1/g;
# 結果を出力
print "置換後の文字列: $string\n";
実行結果
置換前の文字列: Today is 2024-02-23. Tomorrow will be 2024-02-24.
置換後の文字列: Today is 23-02-2024. Tomorrow will be 24-02-2024.
コードの解説
サンプルコードでは、変数に対して正規表現を使用した置換を行うためにs///演算子を使用しています。変数の内容を置換するためのs///演算子の基本的な使い方は以下の通りです。
$変数名 =~ s/置換前の文字列/置換後の文字列/g;
サンプルコードの中では、上記演算子を以下のように複雑な書き方としています。
$string =~ s/(\d{4})-(\d{2})-(\d{2})/$3-$2-$1/g;
これは、置換前の正規表現(\d{4})-(\d{2})-(\d{2})で、4桁の年、2桁の月、2桁の日をそれぞれキャプチャグループとしてマッチさせています。
置換後の文字列は$3-$2-$1です。この置換後の文字列の中の$1~3は、置換前のキャプチャグループの順番と対応しています。具体的には、$1は1番目のキャプチャグループである年、$2は2番目のキャプチャグループである月、$3は3番目のキャプチャグループである日を表します。これを、日-月-年の順に並べるため$3-$2-$1と書いています。
まとめ
Perlのs///演算子と正規表現の組み合わせは、文字列操作の幅広いニーズに対応する強力なツールです。基本的な構文から始めて、徐々に複雑なパターンマッチングや置換の技術を身につけることで、Perlプログラミングの効率と表現力を大きく向上させることができます。