小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

マッチ演算子(m//)のx修飾子について(IPアドレス正規表現)

IPアドレス正規表現を探していて、マッチ演算子(m{})のx修飾子のことを知りました。
マッチ演算子のx修飾子とは、パターンの中の空白文字やコメントを無視することができます。
ちなみに、空白文字とは、半角スペース、タブ、改行文字の総称です。

use strict;
use warnings;

my $IPAddress = "172.11.11.255";
if ($IPAddress =~ m{
                   ^ ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) # コメント1
                  \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) # コメント2
                  \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) # コメント3
                  \. ( \d | [01]?\d\d | 2[0-4]\d | 25[0-5] ) # コメント4
                   $
                }x) {
    print "IPアドレスです!\n";
}
else {
    print "IPアドレスでないです!\n";
}

上記は、パターンの中に半角スペース、改行文字とコメントが含まれていますが、それらはx修飾子を使用することでパターンの要素としては無視されます。


ちなみに、上記の正規表現は、IPアドレス正規表現です。
x修飾子を使わないで記述すると以下の感じです。

use strict;
use warnings;

my $IPAddress = "172.11.11.255";
if ($IPAddress =~ /^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])$/) {
    print "IPアドレスです!\n";
}
else {
    print "IPアドレスでないです!\n";
}

尚、本コンテンツは、以下のページを大変参考にさせて頂きました。