関数順 インデックス
目的別 インデックス

構文
 
 m/パターン/オプション

説明

  • マッチ・パターンを使って文字列検索を行います。パターンは正規表現で指定します。
  • マッチ・オプションを指定することで,文字列検索の際の動作を変更できます。例えば,大文字と小文字を区別しないようにできます。
  • 検索対象 =~ m/パターン/オプションの形で使います。

使用例

標準入力ないしはコマンドライン・オプションで指定したファイルのデータから指定文字列が含まれる行を表示する
#!/usr/bin/perl
use strict;
use warnings;

while (my $line = <>) {

# "href"が含まれているかどうかを調べる
  if ($line =~ m/href/) { 
    print $line;
  }
}
標準入力ないしはコマンドライン・オプションで指定したファイルのデータから指定文字列が含まれない行を表示する
#!/usr/bin/perl
use strict;
use warnings;

while (my $line = <>) {

# "href"が含まれていないかどうかを調べる
  if ($line !~ m/href/) { 
    print $line;
  }
}
標準入力ないしはコマンドライン・オプションで指定したファイルのデータから数字で始まる(行頭が数字の)行を表示する
#!/usr/bin/perl
use strict;
use warnings;

while (my $line = <>) {
  if ($line =~ m/^\d/) {
    print $line;
  }
}
標準入力ないしはコマンドライン・オプションで指定されたファイルのデータから2文字以上の数字で始まる行を表示する
#!/usr/bin/perl
use strict;
use warnings;

while (my $line = <>) {

# (^が行頭、\dが数字、{2,}が2回以上)
  if ($line =~ m/^\d{2,}/) { 
    print $line;
  }
}
変数$textの中の数字部分を表示する
#!/usr/bin/perl
use strict;
use warnings;

my $text = '2008年1月2日';

if ($text =~ m/(\d+)/) {
  my $num = $1;
  print $num, "\n";
}
※上記の例の場合,最初の一つしか表示しません。マッチする部分をすべて表示する場合にはgオプションを使います。gオプションを使うと,すべての部分をマッチさせることができます。

変数$textの中の数字部分をすべて表示する(結果をまとめて取得)
#!/usr/bin/perl
use strict;
use warnings;

my $text = '2008年1月2日';
my @match_result = ($text =~ m/(\d+)/g);
foreach my $match_str (@match_result) {
  print $match_str, "\n";
}
変数$textの中の数字部分をすべて表示する(結果を一つずつ取得)
#!/usr/bin/perl
use strict;
use warnings;

my $text = '2008年1月2日';

while ($text =~ m/(\d+)/g) {
  my $num = $1;
  print $num, "\n";
}
配列@filesの要素からpdf(大文字/小文字無視)で終わるデータを表示する
#!/usr/bin/perl
use strict;
use warnings;

my @files = qw(
  data.pdf
  img1.png
  img2.png
  sample.PDF
  index.html
  DEFAULT.HTM
);

foreach my $file (@files) {
  if ($file =~ m/pdf$/i) {
    print $file, "\n";
  }
}
変数$textの中のアルファベット2文字以上の部分をすべて表示する
#!/usr/bin/perl
use strict;
use warnings;

my $text = 'PerlはLarry Wall氏が開発ました。';

while ($text =~ m/([A-Za-z]{2,})/g) {
  my $match = $1;
  print $match, "\n";
}
配列@fileの要素から/etcで始まるデータを表示する(区切り文字に/を使用)
#!/usr/bin/perl
use strict;
use warnings;

my @files = qw(
  /home/user1/.bashrc
  /etc/hosts
  /usr/bin/perl
);

foreach my $file (@files) {

# /をエスケープする必要がある
  if ($file =~ m/\/etc/) { 
    print $file, "\n";
  }
}
配列@filesの要素から/etcで始まるデータを表示する(区切り文字に/以外を使用)
#!/usr/bin/perl
use strict;
use warnings;

my @files = qw(
  /home/user1/.bashrc
  /etc/hosts
  /usr/bin/perl
);

foreach my $file (@files) {

# /をエスケープする必要がない
  if ($file =~ m|/etc|) { 
    print $file, "\n";
  }
}
変数$textの中の数字部分をすべて表示する(mを省略)
#!/usr/bin/perl
use strict;
use warnings;

my $text = '2008年1月2日';

# mを省略
while ($text =~ /(\d+)/g) { 
  my $num = $1;
  print $num, "\n";
}