6.正規表現

第7回

参考サイト:

上記サイトを参考に、正規表現の表記法と利用法について学ぶ

開発環境:

    • Web上のプログラミング開発・投稿サイト、IDEONEを利用する。
    • ideone.com
    • ID登録をすると、ユーザ別にコードの保存と、private モードのコード保存が可能になる。
    • ID登録なしでも利用可能。ただし、作成したコードは public モードで公開される。
    • ※ 無限ループなどサーバに負荷をかけると、サーバに接続できなくなる場合がある。

練習:

IDEONEでユーザ登録をし、以下のPerlコードを実行し、動作確認。

$a = "Hello World!";
print $a;

IDEONEでは、作成したコードと実行結果のページの埋め込み用タグや、共有用ショートURLが利用できる。

今回の課題提出は、課題提出用のWebページに、IDEONEのコードへのリンクを掲載で、提出とする。

正規表現でパターン判定:

パターン指定の例:

年月日 [0-9]{4}\/[0-9]{2}\/[0-9]{2} 繰返し回数の指定に、{}を利用。 {}の直前のパターンの回数を指定 学籍番号 [0-9]{7} URL http:\/\/[A-z0-9_.-\/]+ メールアドレス(簡易版) [A-z0-9_.-]+@[A-z0-9_.-]+\.jp

Perlと正規表現

Perl のプログラム中では、パターンマッチ演算子 =~ を使用して、if 文などで利用できる。

正規表現は、 / / で囲む

例) if( $a =~ /a+z/ ) { # 変数$a に、 a が1回以上登場して、次にzが現れる場合 print "a+z のパターン <br>\n"; } if( $a =~ /^a.*z$/ ) { # 変数$a が、 先頭が a で、末尾は z 。中間には任意の文字がある場合 print "^a.*z のパターン <br>\n"; }

問題1:

学籍番号のパターン : 7桁数字

例)

1306123

2104123

1199123

1200123

問題2:

日付のパターン : 4桁数字+2桁数字+2桁数字

例)

1980/03/01

1999/08/09

2008/10/15

問題3:

電話番号のパターン : 3桁数字+4桁数字+4桁数字

例)

090-4567-9876

080-3333-4444

052-9754-2222

問題4:

URLのパターン : http:// + アルファベットと数字と記号(./-_)で構成された文字列

例)

http://www.nagoya-bunri.ac.jp

http://maps.google.co.jp/maps

http://kaz.cyteen.nagoya-bunri.ac.jp/cgi-bin/AP2/iattend2.cgi

応用問題:

問題5:

パスワードの使用許可文字列など、パターン判定が有用な場面を想定して、パターンマッチをする。

例)

パスワードに、アルファベットと数字が最低1つづ使用されているか、パターンマッチで判定する。

問題6:

Perlのパターンマッチの、グループ化について調べ、グループ化にマッチした文字列を利用した、

文字列処理のプログラムを作成する。

http://rfs.jp/sb/perl/02/09.html

例)

単語の検出。

 .* のパターンは最長マッチで、可能な限り長いパターンとマッチする。
 .*? と ? を付加することで、最短マッチでパターンマッチするようになる。
.*abc 一番最後のabcにマッチ
  .*?abc 一番最初のabcにマッチ

$str = "kobayashi Hasegawa yokota";

$str =~ /.*(kobashi|hasegawa|yokota).*/;

print $1, "がいます\n";

$str = "電話ください。090-9876-5432 待ってます。";

$str =~ /(.*)([0-9\-]{11,})(.*)/g;

print $1,"番号削除",$3,"\n";

$str = "電話ください。090-9876-5432 待ってます。";

$str =~ /(.*?)([0-9\-]{11,})(.*)/g;

print $1,"番号削除",$3,"\n";