Lua Memo

正規表現

正規表現が使える。Perlなどの「\」ではなく、「%」を使う。

メタ文字

その意味

x

文字 x それ自身を表す。

.(ドット)

すべての文字を表す。

%a

すべてのletterを表す。

%c

すべての制御文字を表す。

%d

すべての数字を表す。

%l

すべての小文字を表す。

%p

すべての区切り記号を表す。

%s

すべての空白文字を表す。

%u

すべての大文字を表す。

%w

すべての英数文字を表す。

%x

すべての十六進数字を表す。

%z

0として表現される文字を表す。

%x (x は英数文字以外)

文字 x 自身を表す、文字のエスケープ

[set]

set 内のすべての文字の和からなるクラスを表す。a-z 範囲を表す。

[^set]

set の補集合を表す。 set の内容は上で説明したものと同じである。

パターンの要素 は以下のいずれかである。

  • 単一の文字クラスに `*´ が続いたもの。そのクラスの文字の0回以上の繰り返しにマッチする。この繰り返し要素は、可能な限り長いシーケンスにマッチする。
  • 単一の文字クラスに `+´ が続いたもの。そのクラスの文字の1回以上の繰り返しにマッチする。この繰り返し要素は、可能な限り長いシーケンスにマッチする。
  • 単一の文字クラスに `-´ が続いたもの。そのクラスの文字の0回以上の繰り返しにマッチする。 `*´ と異なり、この繰り返し要素は可能な限り 短い シーケンスにマッチする。
  • 単一の文字クラスに `?´ が続いたもの。そのクラスの文字の0回または1回の出現にマッチする。
  • %n (n は1から9)。これは、n 番目にキャプチャされた文字列にマッチするような要素である (下の説明を参照)。
  • %bxy (x と y は異なる文字)。これは x で始まって y で終わる文字列にマッチするような要素である。 x と y は 対応が取れる。つまり、文字列を左から右に読んでいって、 x が現れるたびにカウントを +1 し、y では -1 したとき、最後の y はカウントが0になる最初の y である。例えば、要素 %b() はカッコの対応が取れた式にマッチする。
  • pattern はパターン要素の列である。パターンの最初に現れる `^´ は対象文字列の先頭にマッチを固定する。パターンの最後に現れる `$´ は対象文字列の最後にマッチを固定する。他の位置では、`^´ や `$´ は特別な意味を持たず、それ自身を表す。

パターンはカッコで囲まれたサブパターンを持つことができ、それらは キャプチャ と呼ばれる。マッチが成功したとき、対象文字列の中でキャプチャにマッチした部分が保存 (キャプチャ) され、後で使うことができる。キャプチャはその左カッコによって番号付けされる。例えば、パターン "(a*(.)%w(%s*))" では、 "a*(.)%w(%s*)" にマッチする部分が最初のキャプチャとして保存され (だから1番になる)、 "." にマッチする文字が2番にキャプチャされ、 "%s*" にマッチする部分が3番になる。

特殊なケースとして、空キャプチャ () は文字列の現在位置 (数値) をキャプチャする。例えば、文字列 "flaaap" にパターン "()aa()" を適用すると、 2つのキャプチャ3と5を得られる。

パターンには途中にゼロを含むことができない。代わりに %z を使う。

参考