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";