Unicodeで正規表現検索
use utf8で挙動が変わるPerlの正規表現
言うまでもないかもしれませんが、Perlでは正規表現が利用できます。「\d」では半角数字が、「\w」で半角英数字が検索できるという便利な検索の仕組みのことです。
詳しいことは下記のサイトをご参照あれ。Perlの正規表現について詳細に解説してくれています。
さて、「\d」「\w」のメタ文字は、先述の通り半角数字、半角英数字にそれぞれマッチします。
メタ文字 | 説明 |
---|---|
\d | 数字の1文字にマッチ [0-9] と同じです。 |
\w | アルファベットまたは数字(単語)の1文字にマッチ [a-zA-Z_0-9] と同じです。 |
ところが、Perlスクリプト内でutf8プラグマを記入しておくと、ちょっと違う動作を行いました。
#!/usr/bin/perl use strict; use warnings; use utf8; use feature qw/say switch/; use open IO => qw/:utf8 :std/; $_ = "Androidマーケットのアプリを, 10〜20インストール。"; my @eisu = m|\w|g; my @suji = m|\d|g; say '@eisu'; say @eisu; say '@suji'; say @suji;
このスクリプトを実行してみると、
「\w」がいろんな文字にヒットしちゃってますね。句読点、カンマなどの約物やスペース、それに記号は弾いてくれるようですが、それ以外の全半角カタカナ、ひらがな、全半角英数字は該当するようです。
「\d」も全半角の数字にヒットしています。
多機能すぎて不便に……?
これは、こういう状態になることをわかって使う分には便利ですが、半角英数字だけがほしいというときにはかえって困りものです。
正確に半角数字だけがほしいときは「[0-9]」、半角英字がほしいときは「[a-zA-Z]」みたいに書いておいた方がよさそうです。ほかにも解決方法はありそうですが……。