Cisco CRS-1 シリーズ キャリア ルーティング システム スタートアップ ガイド
正規表現、特殊文字、およびパターン の理解
正規表現、特殊文字、およびパターンの理解
発行日;2012/01/13 | ドキュメントご利用ガイド | ダウンロード ; この章pdf | フィードバック

目次

正規表現、特殊文字、およびパターンの理解

正規表現

特殊文字

文字パターンの範囲指定

複数文字パターン

量指定子を使った複雑な正規表現

パターンの選択

位置指定文字

アンダースコア ワイルド カード

パターンの呼び出しに使われる括弧

正規表現、特殊文字、およびパターンの理解

ここでは、大量のコマンド出力を検索するために利用する正規表現、特殊文字、ワイルド カード、そしてパターンについて説明します。

「正規表現」

「特殊文字」

「文字パターンの範囲指定」

「複数文字パターン」

「量指定子を使った複雑な正規表現」

「パターンの選択」

「位置指定文字」

「アンダースコア ワイルド カード」

「パターンの呼び出しに使われる括弧」

正規表現

正規表現とは、パターン化した表現(句、数字、句や数字の複雑な組み合わせ)のことです。

正規表現には大文字と小文字の区別があり、複雑な一致条件を満たすことができます。簡単な正規表現では、たとえば Serial misses 、または 138 のようになります。

複雑な正規表現は、たとえば 00210... ( is ) 、または [Oo]utput のようになります。

正規表現は、1 文字のパターンも複数の文字の組み合わせのパターンも使用できます。つまり、正規表現では、コマンド出力の同じ文字と一致する 1 文字を指定することも、コマンド出力の同じ複数文字と一致する複数文字を指定することもできます。コマンド出力に表示されるパターンを文字列と呼びます。

最も簡単な正規表現は 1 文字だけで構成され、コマンド出力内の同じ文字と一致します。英文字(A-Z、a-z)、数字(0-9)、そして他のキーボード上の文字(たとえば ! または ~)は、1 文字パターンとして使用できます。

特殊文字

一部のキーボード文字は、正規表現として使用されると特別な意味を持ちます。 表D-1 に、このような特殊な文字を示します。

 

表D-1 特殊な意味を持つ文字

文字
特殊文字としての意味

.

任意の 1 文字(スペースを含む)と一致する。

*

直前のパターンが 0 回またはそれ以上連続する場合に一致する。

+

直前のパターンが 1 回またはそれ以上連続する場合に一致する。

?

直前のパターンが 0 または 1 つある場合に一致する。

^

文字列の先頭に一致する。

$

文字列の最後の部分と一致する。

_ (アンダースコア)

コンマ(,)、左波括弧({)、右波括弧(})、左丸括弧( ( )、右丸括弧( ) )、文字列の始め、文字列の終わり、またスペースと一致する。

これらの特殊文字を、普通の 1 文字のパターンとして使うには、バックスラッシュ(\)を特殊文字の前に置き、特殊文字として機能しないようにします。次の例に、ドル記号、アンダースコア、そしてプラス記号と一致する 1 文字パターンを示します。

\$ \_ \+

文字パターンの範囲指定

1 文字パターンの範囲指定は、コマンド出力との一致に利用することができます。1 文字パターンの範囲を指定するには、1 文字 パターンを角括弧( [ ] )で囲みます。パターンに一致させるには、指定範囲の文字のうちどれか 1 つが、検索対象の文字列の中に存在していなければいけません。たとえば、 [aeiou] は、小文字で表した母音(aeiou)のうちどれか 1 つと一致していればよく、一方、 [abcdABCD] では、大文字または小文字アルファベットの最初の 4 文字のうちどれか 1 つと一致していればよいということです。

範囲の始めと終わりの文字の間にダッシュ(-)を入れることで、文字の範囲の表現を次の例のように簡略化できます。

[a-dA-D]

ダッシュを 1 文字パターンとして検索範囲に追加するには、バックスラッシュを前につけたダッシュをもう 1 つ加えます。

[a-dA-D\-]

角括弧(])もまたバックスラッシュを前につけることで 1 文字パターンとして範囲に含めることができます。

[a-dA-D\-\]]

範囲の始めにキャレット(^)をつけると、指定範囲以外の文字と一致する条件に変えることができます。次に、範囲内の文字以外であればどの文字でも一致するという例を示します。

[^a-dqsv]

次に、右角括弧(])または d 以外であればどの文字でも一致するという例を示します。

[^\]d]

複数文字パターン

複数文字の正規表現は、文字、数字、そして特殊な意味をもたないキーボード文字を繋ぎ合わせて作成します。複数文字パターンでは、文字の順序が重要になります。 a4% という正規表現は、 a の後に 4 、そしてその後に % 記号が続く文字列と一致します。文字列に a4% がこの順序で含まれていない場合は、そのパターンとは一致しません。

複数文字の正規表現である a. は、ピリオドの特殊文字としての役割を利用します。そのため、a の後に何か 1 つ文字があれば一致します。この正規表現の例では、ab、a!、および a2 はすべて条件にあった文字列となります。

特殊文字になっているキーボード文字を、普通の文字として指定するには、その文字の前にバックスラッシュを置きます。文字の前にバックスラッシュを置くことで、特殊文字としての役割を無効にできます。たとえば、 a\. という表現をコマンド構文で使用すると、a. という文字列だけが一致します。

すべての文字、数字、キーボード文字、または文字、数字、そしてキーボード文字の組み合わせなどを含んだ複数文字の正規表現は、有効な正規表現です。たとえば、 telebit 3107 v32bis などは正規表現として有効です。

量指定子を使った複雑な正規表現

量指定子を使ってさらに複雑な正規表現を作り、指定した正規表現で複数のパターンに一致するよう、Cisco IOS-XR ソフトウェアに指示を出すことができます。 表D-2 に、正規表現で繰り返し回数を指定する特殊文字を示します。

 

表D-2 量指定子として使われる特殊文字

文字
説明

*

0 個またはそれ以上の 1 文字パターンまたは複数文字パターンと一致する。

+

1 個またはそれ以上の 1 文字パターンまたは複数文字パターンと一致する。

?

0 または 1 個の 1 文字パターンまたは複数文字パターンと一致する。

次に、a が任意の回数続くパターンと一致する例を示します。a がない場合も含みます。

a*

次に、a が任意の回数続くパターンで、最低 1 つの a を含むパタ-ンと一致する例を示します。

a+

次のパターンは、bb または bab と一致します。

ba?b

次のパターンは、任意の数のアスタリスク(*)と一致します。

\**

複数文字パターンと共に量指定子を使うには、パターンを丸括弧で括ります。次に、複数文字列 ab が任意の回数続くパターンと一致する例を示します。

(ab)*

次は複雑な例で、英字 1 つと数字 1 つのペアが、1 回またはそれ以上続くパターンと一致する例です。

([A-Za-z][0-9])+

量指定子(*、+、?)を使ったパターン マッチングは、一番長い表現から先に行われます。ネストされた表現の場合、外側から内側の表現へと順にマッチングが行われます。連結された表現は、左側の表現の始めからパターン マッチングが行われます。この正規表現は、文字が数字の前に置かれているため、A9b3 には一致しますが、9Ab3 には一致しません。

パターンの選択

文字列に対してマッチングを行うパターンは、複数から選択することができます。選択可能なパターンは縦棒( | )で区切ります。文字列と一致できるのは、選択可能なパターンのうち、どれか 1 つだけです。たとえば、 codex|telebit という正規表現は、codex または telebit という文字列どちらか 1 つと一致します。codex と telebit の両方を持つ文字列にのみ一致するということではありません。

位置指定文字

位置指定文字は、文字列の始めまたは終わりに対して正規表現のパターンを一致させるのに使います。 表D-3 に示す特殊文字を使って文字の一部に正規表現を付けることができます。

 

表D-3 位置指定に使われる特殊文字

文字
説明

^

文字列の先頭と一致する。

$

文字列の末尾と一致する。

たとえば、 ^con という正規表現は、con で始まるどの文字列とも一致し、 sole$ は、sole で終わるどの文字列とも一致します。

^ 記号は、文字列の始まりを示すほか、角括弧で囲んだ文字列の範囲の中で使用した場合は、論理関数の「not」として扱われます。たとえば、 [^abcd] という表現は、a、b、c、および d 以外の文字ならどれでも一致するという範囲を指定します。

アンダースコア ワイルド カード

文字列の先頭(^),文字列の末尾($)、丸括弧(( ))、スペース( )、波括弧({})、コンマ(,)、およびアンダースコア(_)と一致させるには、アンダースコア文字を使います。アンダースコア文字は、文字列の任意の場所に存在するパターンを指定するのに使用できます。たとえば、 _1300_ は、1300 が含まれる文字列で、1300 の前または後にスペース、括弧、コンマ、またはアンダースコアがくる文字列のどれとも一致します。 _1300_ は、{1300_ という正規表現と一致しますが、21300 や 13000t といった正規表現とは一致しません。

アンダースコア文字は、長い正規表現のリストの代わりにもなります。たとえば、
^1300( ) ( )1300$ {1300, ,1300, {1300} ,1300, (1300
、とする代わりに、単に _1300_ と指定できます。

パターンの呼び出しに使われる括弧

パターンの出現回数を増やすには、括弧を複数文字正規表現と共に使います。Cisco IOS-XR ソフトウェアは、パターンを記憶し、それを正規表現内の他の場所で使うことができます。

先に使用したパターンを記憶して再利用する正規表現を作成するには、特定のパターンを記憶するために丸括弧を使い、バックスラッシュ(\)の後に番号を振ったものを、記憶したパターンの再利用に使います。番号は、正規表現内の丸括弧の出現番号を指定するものです。正規表現の中に、1 つ以上の記憶されたパターンがある場合は、\1 が最初に記憶されたパターン、\2 は 2 番目に記憶されたパターンという形で続きます。

次は、パターンの記憶のために丸括弧を用いた正規表現です。

a(.)bc(.)\1\2

この正規表現と一致する文字列は、a、任意の文字(1 番目の文字)、b、任意の文字(2 番目の文字)、再び 1 番目の文字、そして 2 番目の文字が続く文字列になります。たとえば、aZbcTZT という文字列はこの正規表現と一致します。ソフトウェアが 1 番目の文字である Z と 2 番目の文字である T を記憶するので、正規表現の最後で再び Z と T が使われます。