![]() |
![]() |
![]() |
![]() |
管理運営:有限会社ミスティーネット |
|||
| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 | | |||
![]() |
![]()
![]()
![]()
|
HOME >> 正規表現について1
■ 正規表現とは?
正規表現を使うと文字列が、特定のパターンにマッチしているかを調べることが出来ます。 特定の文字列が含まれているかを調べるなら、index 関数を使えますが、 例えば、「http://」 から始まる文字列や、1つの 「@」 を含む8文字以上の文字列 などのように、正規表現を使うとより正確な文字のマッチングを行なうことが可能です。 ■ 簡単な文字のマッチング
正規表現を使った文字のマッチングは下記のように行ないます 修飾子はなくても検索できます。 → 修飾子について [書式] 検索対象の文字列 =~ m/検索文字/(修飾子);
# 「xyz」 という文字列を含んでいるかどうかを調べるには場合
正規表現を使った文字のマッチングでは、文字がマッチした場合には真を、しなかった場合には偽を返すため、条件分岐によく使われます。$charactor = "abcdefghijklmnopqrstuvwxyz"; ← 検索対象の文字列をセット if ( $charactor =~ /xyz/ ) { ← 文字列のマッチング print "xyz を含んでいます。\n"; } ここでは、文字列 「xyz」 を含んでいた場合には、「xyz を含んでいます」 というメッセージを表示しています。 「^」 は、〜始まる文字、「$」 は、〜出終わる文字を指定します。 その他にも位置を指定する記号がいくつかありますので、下記ページを御参照ください。 → 位置指定子の詳細
$charactor = "abcdefghijklmnopqrstuvwxyz"; ← 検索対象の文字列をセット if ( $charactor =~ /^abc/ ) { ← 文字列のマッチング print "「abc」 から始まる文字列です。\n"; } if ( $charactor =~ /xyz$/ ) { ← 文字列のマッチング print "「xyz」 で終わる文字列です。\n"; } 正規表現の特徴の1つとして、検索文字にメタ文字を使用することが出来ます。 メタ文字を使うと、「数字1文字に一致」 などのようにより自由度の高いマッチ処理を行なうことが出来ます。 → 各種メタ文字の詳細
# 「00:00:00」 の時刻フォーマットかどうかを調べる場合
「\d」 は数字1文字にマッチします。$time = "12:33:24"; if ( $time =~ /^\d\d:\d\d:\d\d$/ ) { ← 文字列のマッチング print "00:00:00 形式の時刻データです。\n"; } 「^」 は行頭に一致の意味です。 「$」 は行末に一致の意味です。 ■ 〜のいずれか1文字にマッチ
複数の文字の中からいずれか1文字をマッチさせる場合には、文字クラスを使います。 文字クラスは、[] の中にマッチさせたい文字を複数入力します。 「-」 を使うと範囲指定を行なうことも出来ます。
# 「a」 、「b」 、「c」 のいずれかの文字列を含んでいるかどうかを調べる場合
範囲指定では下記のような使い方が出来ます。$charactor = "abcdefghijklmnopqrstuvwxyz"; if ( $charactor =~ /[abc]/ ) { ← a か b か c の文字列のマッチング print "a か b か c を含んでいます。\n"; } # 範囲指定を使った場合 if ( $charactor =~ /[a_c]/ ) { ← a から c のいずれかの文字列のマッチング print "a か b か c を含んでいます。\n"; } 一番下の例のように併せ技も可能です。 [0-9] ・・・ 0 〜 9まで ■ いずれかの単語にマッチ
正規表現では、パターンをパイプ(|)で区切ることで、検索する文字列を複数選択することが出来ます。
# 「おはよう」 、「こんにちは」 、「こんばんは」 のいずれかにマッチするかを調べる場合 $charactor = "おはようエブリデイ"; if ( $charactor =~ /おはよう | こんにちは | こんばんは/ ) { print "「おはよう」 か 「こんにちは」 か 「こんばんは」 を含んでいます。\n"; } Perl 実例集 → 高速な文字のマッチング処理 ■ 繰り返し文字の指定
一定の文字パターンの繰り返しが含まれた文字をマッチングするには、量指定子を使います。 これは、指定子の前に来る文字列に有効となります。 → 量指定子について [0文字〜1文字のマッチング]
if ($charactor =~ /^\d?$/) { print "0文字か1文字の数字\n"; } if ($charactor =~ /^\d*$/) { print "0文字以上の数字\n"; } if ($charactor =~ /^\d+$/) { print "1文字以上の数字\n"; } [n文字〜m文字のマッチング]
if ($charactor =~ /^\d{5}$/) { print "5文字の数字\n"; } if ($charactor =~ /^\d{5,}$/) { print "5文字以上の数字\n"; } if ($charactor =~ /^\d{5,10]$/) { print "5文字以上10文字以下の数字\n"; } [2文字以上の文字列に対して回数を指定したマッチング]
if ($charactor =~ /^(XYZ)?$/) { print "XYZ か空文字\n"; } if ($charactor =~ /^(XYZ)*$/) { print "空文字か 0回以上の XYZの繰り返し\n"; } if ($charactor =~ /^(XYZ)+$/) { print "空文字か 1回以上の XYZの繰り返し\n"; } if ($charactor =~ /^(XYZ){5}$/) { print "5回の XYZ\n"; } if ($charactor =~ /^(XYZ){5,}$/) { print "5回以上の XYZ\n"; } if ($charactor =~ /^(XYZ){5,10]$/) { print "5回以上10回以下の XYZ\n"; }
|