戻る

10.配列解析プロジェクト

10-2.正規表現のいろいろ

■ メタ文字のいろいろ

メタ文字 正規表現上の意味
(   ) グループ化
[   ] カッコ内の文字のどれか一文字
\w 英字、数字、アンダースコア。[a-zA-Z0-9_] に同じ。
\W 英字、数字、アンダースコア以外の文字。[^a-zA-Z0-9_] に同じ。
\d 数字。[0-9] に同じ。
\D 数字以外の文字。[^0-9] に同じ。
\t タブ
\r リターン(復帰文字)
\n 改行
\s スペース。[ \r\t\n\f] に同じ。

使用例)
タブによって、2個の要素のスプリットされます。
@a = split(/\t/, "This is a pen.\tThis is a notebook.");
空白とタブによって、8個の要素のスプリットされます。
@a = split(/\s/, "This is a pen.\tThis is a notebook.");

■ 量指定子

メタ文字 正規表現上の意味
* 直前の文字を0回以上にマッチ
+ 直前の文字を1回以上にマッチ
? 直前の文字を0又は1回にマッチ
{n} 直前の文字をn回にマッチ
{n,} 直前の文字をn回以上にマッチ
{n,m} 直前の文字をn回以上、m回以下にマッチ

使用例)
if ($word =~ /[a-z]{5}/)
{
   print "小文字のアルファベットが5文字連続している箇所が含まれます!\n";
}
if ($word =~ /(じゃ)+ーん/)
{
   print "「じゃーん」か「じゃじゃーん」、「じゃじゃじゃーん」などが含まれるぞ\n";
}

■ 文字列の置換

最初にマッチした文字列のみを置換します。
$word = "This is a pen. That is a pencil."
$word =~ s/pen/eraser/;
print "$word\n";
This is a eraser. That is a pencil.
マッチした文字列すべてを置換します。
$word = "This is a pen. That is a pencil."
$word =~ s/pen/eraser/g;
print "$word\n";
This is a eraser. That is a erasercil.
マッチした文字列は、Perlが勝手に作る変数$1、$2、$3に代入されてますので、 それを利用すると次のようなことができます。
$word = "0426919326"
$word =~ s/(\d\d\d)(\d\d\d)(\d\d\d\d)/$1-$2-$3/;
print "$word\n";
042-691-9326
戻る
©kazuo