正規表現(2)〜正規表現のオプションとsplitで正規表現を使う

理解してもらうということをまったく考慮していない記事ですみません。とりあえずの更新第2弾。こちらもあとで書き直します。

$s =~ /.+/ # '/' でなくてもOK
$s =~ m/.+/;
$s =~ m!.+!;
$s =~ m%.+%;
$s =~ m{.+};

### URL(例) ###
$_ = 'http://www.keyman.or.jp/3w/hoge/fuga.html';
#URLのときは、デリミタに/を使うとURL内の/に\やバックスラッシュを付けてエスケープしないといけないので、/以外のデリミタ使う。一般的には、()や{}を使うことが多い。
print int(m%^https?://((\w+\.)*\w+/)*(\w+\.)*\w+\z%)."\n";

### 正規表現オプション ###
$s =~ /abc/i; #=> 大文字小文字を無視
print int 'ABC' =~ /abC/i;

$s =~ /abc/s; #=> シングルラインモード  .を改行にもマッチさせるようにする
print int "aaa\nbbb" =~ /a+.b+/;  #=> NG
print int "aaa\nbbb" =~ /a+.b+/s; #=> OK

#オプションのgは、「繰り返し」の意味
#gは、while文の時ぐらいにしか使わない。とくに、html paserを使うときに強力。htmlを取得して各タグ内の文字だけを取得するときに、タグごとに$sに入れて処理を回し、>続きからまた同じことができるため。
#下の処理は、一文字ごとに$sに入れて出力させる処理
$s = 'abcde';
while($s =~ /(.)/g){
    print "---$1---\n"
}

### マッチ以外の使い方 ###
#splitにも正規表現が使える。
#splitは、頭の空文字は捨てないが、後ろの空も文字は捨てる。
@X = split(/\t/, "xxx\tyyy\tzzz");
print join ('#', split(/\W/, "xxx yyy+zzz:abc"))."\n";
print join ('#', split('', "aaa.bbb.ccc"))."\n";

print join('#', split(/:/, ':a:b:c:::'))."\n";#第0要素はNULLとなっている。
print join('#', split(/:/, 'a:b:c:::', 2))."\n";
print join('#', split(/:/, 'a:b:c:::', 3))."\n";
print join('#', split(/:/, 'a:b:c:::', -1))."\n";
print join('#', split(/:/, ':a:b:c:::', -1))."\n";#第0要素と第4要素以降はNULLとなっている。
#上記の4つのprintは、上から下記のような結果になる。
#splitで第三引数を指定すると、後ろの空文字を残すことができる。第三引数は、区切り位置の数を指定する。第三引数に-1を入れた場合は、後ろの空文字を残したまま区切った要素を配列に入れることができる。
=head
#a#b#c
a#b:c:::
a#b#c:::
a#b#c###
#a#b#c###
=cut