トップへ戻る

Autoitプログラミング

正規表現

 

正規表現は、プログラミングには欠かせない存在になります。

 

複雑な文字列から指定したパターンにマッチした文字列の検索、置き換えができます。

 

正規表現で使用する文字 AutoItのドキュメントから引用(一部変更しています)

 

 

メタ文字

メタ文字とは、正規表現で使用する特別な意味を持つ文字のことを言います。
\ ^ . $ *+ ? | ( ) [ ] { }

文字クラスメタ文字

- ^

[ ... ]

文字クラス。リストの中の任意の1文字と一致。

リストの中の複数の文字のどれかにマッチすると言えばわりやすいかと思います。

例:[aeiou]は「aiueo」一致します。

リストの中の任意の1文字と一致するので、文字列が「u」のみでもマッチすることになります。


文字クラスの中で「-」(ダッシュ)を使えば[123456789]を[1-9]のように書くことができます。
どちらも同じ意味で、1〜9の数字どれかにマッチします。
文字列に1〜9すべてが含まれていれば、すべてにマッチします。
他にも、[a-z]、[A-Z] 、[0-9a-zA-Z]というように書くこともできます。
この「-」(ダッシュ)を文字クラスメタ文字と言います。
「-」(ダッシュ)にマッチしたい場合、[-a-z]または[a-z-]というように文字クラスの最初

または最後にダッシュを書きます。


角カッコにマッチさせたい場合、[[]]、または [][] というように書きます。

特殊な意味をもつ文字は文字クラス内では特殊な意味をもつ文字として扱われません。ただし例外的に\\\^\-\[\]はエスケープされているものとしてセット内で扱われます。

[^ ... ]

否定文字クラス。リストの中の任意の1文字以外と一致。

「^」(キャレット)も文字クラスメタ文字です。

[^0-9]は数字以外の全ての文字と一致します。

キャレットを検索する場合は開始直後に置くか、エスケープ(\^)します。


例:文字列「\^」にマッチさせる場合、[\\^]と書きます。

[\\^]の中の「^」(キャレット)は文字クラスメタ文字ではありません。


※この「^」(キャレット)は文字クラス以外では別の意味を持ちます。

[:class:] 指定された文字クラスとの一致。有効なクラス:alpha(任意のアルファベット文字)、alnum(任意の英数字)、lower(任意の小文字)、upper (任意の大文字)、digit (0-9の任意の数字)、xdigit (0-9、A-F、a-f の任意の16進数数字)、space (任意のホワイトスペース文字)、blank (スペースまたはタブ)、print (任意の印刷可能文字)、graph (スペースを除く任意の印刷可能文字)、cntrl (任意の制御文字[ascii 127 、32以下])、punct (任意の句読点文字)。また[0-9]は[[:digit:]]と等しいです。 
[^:class:] 指定された文字クラス以外との一致。ただし最初の文字だけです。
( ... ) グループ。グループ内の要素は並び順に扱われ、繰り返し処理時に一緒に取り扱われます。例:(ab)+は"ab"、"abab"に一致しますが"aba"には一致しません。またフラグによっては後方参照、関数の返す配列に使用するために一致したテキストを保持します。
(?i) 大文字小文字非区別フラグ。グループとしては動作しません。正規表現エンジンが大文字小文字の区別をしないように設定します。
(?-i) (デフォルト)大文字小文字区別フラグ。グループとしては動作しません。正規表現エンジンが大文字小文字の区別をするように設定します。 
(?: ... ) 非キャプチャーグループ。一致文字を配列に記録しない、後方参照に使用しない以外は通常のグループと同じです。
(?i: ... ) 大文字小文字非区別、非キャプチャーグループ。大文字小文字の区別をしない以外は通常の非キャプチャーグループと同じです。
(?-i: ... ) 大文字小文字区別、非キャプチャーグループ。大文字小文字の区別をする以外は通常の非キャプチャーグループと同じです。
(?m)

行内マッチモード。

このモードでは「^」(キャレット)、「$」(ドル)は特別な意味を持ちます。

(?s)

「.」は改行を含む任意の文字と一致します。

デフォルトでは「.」は改行とは一致しません。

(?x) ホワイトスペースと#コメントを無視します。
(?U)

強欲な量指定子の反転。

例 文字列:abababab

正規表現:[a-z]+

結果:配列は1つ。配列[0]の中身は「abababab」となります。

正規表現:(?U)[a-z]+

結果:配列は8つ、配列の中身は

[0]a

[1]b

[2]a

[3]b

[4]a

[5]b

[6]a

[7]b

となります。

^ \A と同じ意味。すべての行の最初の位置にマッチ。

(?m)を使用した場合、文字列の先頭と改行の直後。

$ \Z と同じ意味。すべての行の最後の位置にマッチ。

(?m)を使用した場合、改行の直前と文字列の末尾。

(?=...)

肯定の先読み。
例:test(?=パターン)
文字列「パターン」が後に続く「test」にマッチ。

(?!...)

否定の先読み。
例:test(?!パターン)
文字列「パターン」が後に続かない「test」にマッチ。

(?<=...)

肯定の後読み。
例:(?<=パターン)test
文字列「パターン」が前にある「test」にマッチ。
※後読みでは反復文字 +、 * 、{0,}、{1,} を使用できません。

(?<!...)

否定の後読み。
例:(?<!パターン) test
文字列「パターン」が前にない「test」にマッチ。
※後読みでは反復文字 +、 * 、{0,}、{1,} を使用できません。

(?>...)

バックトラック。

例:(?>a)aab は「aaab」にマッチするが、「acaab」にはマッチしない。
「aaab」にマッチするが、「aaab」の最初の「a」が必ず存在している必要がある。
※バックトラックでは反復文字 +、 * 、{0,}、{1,} を使用できません。

. 任意の文字と一致(改行文字(\n)を除く)。
| OR。式の片方またはもう片方との一致。
\ 特殊文字のエスケープ(実際の文字との一致)または特殊文字タイプの導入(下記参照)。
\\ バックスラッシュ(\)に一致。
\a アラーム。BEL文字 (chr(7))。
\A 文字列開始位置でのみ一致。
\b 単語境界位置でのみ一致。
\B 非単語境界位置でのみ一致。
\c 次の文字に基づく制御文字に一致。例えば\cMはctrl-Mに一致する。
\d 任意数字(0-9)に一致。
\D 任意非数字に一致。
\e エスケープ文字(chr(27))に一致。
\E ケース終了。
\f フォームフィード文字(chr(12))に一致。
\h 任意の水平ホワイトスペース文字。
\H 任意の非水平ホワイトスペース文字。
\n ラインフィード(@LF, chr(10))に一致。
\Q

\Eまでメタ文字パターンの引用(無効)。

※メタ文字を通常の文字として扱う。

\r キャリッジリターン(@CR, chr(13))に一致。
\s 任意のホワイトスペース文字に一致。ホワイトスペース文字:Chr(9)からChr(13)の水平タブ、垂直タブ、フォームフィード、キャリッジリターンと標準スペース( Chr(32) )。
\S ホワイトスペース文字以外に一致。
\t タブ文字(chr(9))に一致。
\v 任意の垂直ホワイトスペース文字。
\V 任意の非垂直ホワイトスペース文字。
\w 任意の"単語"文字に一致。a-z、A-Z、0-9またはアンダーバー(_)。
\W 非単語文字に一致。
\### 指定されたasciiコードまたは後方参照のasciiコードと対応する文字に一致。8進数で3桁まで。

見つかった場合、後方参照に一致。指定された先のグループ番号と正確に一致します。例えば([:alpha:])\1は二重文字(ダブルレター)と一致します。

\x## 16進数で与えられたasciiコードと対応する文字に一致。2桁まで。
\z 文字列終了位置でのみ一致。
\Z 文字列終了位置、改行文字直前でのみ一致。

反復文字


{x} 直前の1文字、文字クラス、グループをx回繰り返し。
{x,} 直前の1文字、文字クラス、グループを最小x回からそれ以上繰り返し。
{0,x} 直前の1文字、文字クラス、グループを最小0回から最大x回繰り返し。
{x, y} 直前の1文字、文字クラス、グループをx回からy 回繰り返し。
* 直前の1文字、文字クラス、グループを0回以上繰り返し。{0,}と同じ。
+ 直前の1文字、文字クラス、グループを1回以上繰り返し。{1,}と同じ。
? 直前の1文字、文字クラス、グループが0回または1回出現。{0, 1}と同じ。
? (反復文字の後ろ) 最大の一致の代わりに最小の一致を見つけます。

文字クラス


[:alnum:] 文字と数字
[:alpha:] 文字
[:ascii:] 文字コード 0-127
[:blank:] スペースとタブ
[:cntrl:] 制御文字
[:digit:] 10進数の数字 (\dと同じ)
[:graph:] スペースを除く印字文字。
[:lower:] 小文字
[:print:] スペースを含む印字文字。
[:punct:] 文字と数字を除く印字文字。
[:space:] ホワイトスペース(\sとは異なる。\sはVT: chr(11)を含む)
[:upper:] 大文字
[:word:] "単語"文字(\wと同様)
[:xdigit:] 16進数