文字列がパターン(正規表現)を含むかどうかを判定します。
FoundPos := RegExMatch(Haystack, NeedleRegEx , &OutputVar, StartingPos)
型:文字列
内容を検索する文字列。バイナリーゼロを含む場合があります。
型:文字列
検索するパターンで、Perl互換正規表現(PCRE)です。パターンのオプションがある場合は、文字列の先頭に含める必要があり、その後に閉じ括弧が続きます。例えば、i)abc.*123というパターンは、大文字小文字を区別しないオプションをオンにし、"abc "の後に任意の文字が0回以上出現し、その後に "123 "が続くものを検索対象とします。オプションがない場合、")"はオプションです。例えば、)abcは abcと同等です。
NeedleRegExはバイナリーゼロを含むことができませんが、Haystack内のバイナリーゼロに一致させるために、パターン\x00
を使用することができます。
型:VarRef
If omitted, no output variable will be used. Otherwise, specify a reference to the output variable in which to store a match object, which can be used to retrieve the position, length and value of the overall match and of each captured subpattern, if any are present.
パターンが見つからない場合(つまり、関数が0を返す場合)、この変数は空白にされる。
型:整数
If omitted, it defaults to 1 (the beginning of Haystack). それ以外の場合は、2文字目から始める場合は2、3文字目から始める場合は3、といった具合に指定します。If StartingPos is beyond the length of Haystack, the search starts at the empty string that lies at the end of Haystack (which typically results in no match).
負のStartingPosを指定すると、その位置で右からスタートする。例えば、-1は最後の文字から、-2はその次の文字から始まります。StartingPosが Haystackの左端を越えようとした場合、Haystackの全てが検索される。
0を指定すると、Haystackの末尾、つまり最後の文字の右側の位置から開始します。これは、(?<=a)
のようなゼロ幅のアサーションで使用することができます。
StartingPosの値に関係なく、戻り値は常にHaystackの最初の文字からの相対値です。例えば、"123abc789"の "abc"の位置は、常に4です。
型:整数
この関数は、文字列Haystackの中でNeedleRegExが最も左側に出現する位置を返します。ポジション1が最初の文字です。パターンが見つからない場合は0が返される。
シンタックスエラーパターンに構文エラーが含まれる場合、以下のようなメッセージとともにErrorが投げられる:オフセットMでコンパイルエラーN:description. その文字列の中で、NはPCREのエラー番号、Mは正規表現内の問題のある文字の位置、descriptionはエラーを説明するテキストである。
実行エラー:正規表現の実行中にエラーが発生した場合、Errorが投げられます。エラーオブジェクトのExtraプロパティには、PCREのエラー番号が記載されています。このようなエラーは稀ですが、発生しやすいのは「空文字列の可能性が多すぎる」(-22)、「再帰が深すぎる」(-21)、「マッチの限界に達した」(-8)です。このような場合は、可能な限り * を ?、+、{0,3} のような制限に置き換えるなど、より制限の多いパターンに設計し直すようにしてください。
See RegEx Quick Reference for options such as i)abc, which turns off case-sensitivity.
一致した場合、一致した情報を含むオブジェクトがOutputVarに格納される。このオブジェクトは、以下のメソッドとプロパティを持ちます:
Match.Pos, Match.Pos[N] または Match.Pos(N):全体一致の位置、または取り込んだサブパターンの位置を返します。
Match.Len, Match.Len[N] または Match.Len(N):全体的なマッチの長さ、またはキャプチャしたサブパターンの長さを返します。
Match.Name[N] または Match.Name(N):与えられたサブパターンがある場合、その名前を返します。
Match.Count: Returns the overall number of subpatterns (capturing groups), which is also the maximum value for N.
Match.Mark: Returns the NAME of the last encountered (*MARK:NAME), when applicable.
Match[] または Match[N]:全体的なマッチ、またはキャプチャしたサブパターンを返します。
以上のことから、Nは以下のいずれかになることができます:
Match.N: Shorthand for Match["N"], where N is any unquoted name or number which does not conflict with a defined property (listed above). 例えば、match.1や
match.Year
などです。
また、このオブジェクトは列挙をサポートしています。つまり、for-loopがサポートされています。または、LoopMatch.Count
を使用します。
大きな文字列の中の単純な部分文字列を検索するには、RegExMatchよりも高速なInStrを使用します。
パフォーマンスを向上させるため、最近使用された100個の正規表現をメモリ上にキャッシュしておく(コンパイルされた状態)。
学習オプション(S)は、(ループ内などで)何度も使用される正規表現のパフォーマンスを向上させることができる場合があります。
サブパターンには、パターン(?P<Year>d{4})におけるYearという単語のような名前を付けることができる。このような名前は、最大32文字の英数字とアンダースコアで構成されます。名前付きサブパターンにも番号が振られるため、「Year」の後に名前なしサブパターンが発生した場合、OutputVar[1]
ではなくOutputVar[2]
に格納されることに注意しましょう。
abc123 のようなほとんどの文字は、正規表現の中で文字通り使用することができます。However, any of the characters in the set \.*?+[{|()^$
must be preceded by a backslash to be seen as literal. 例えば、.はリテラルピリオド、.はリテラルバックスラッシュです。エスケープを回避するには、\Q...\E.を使用します。事例:\QLiteral Text\E.
正規表現の中で、タブや改行などの特殊文字は、アクセント記号(`)またはバックスラッシュ(\)でエスケープすることができます。For example, `t is the same as \t except when the x option is used.
正規表現の基本を学ぶ(またはパターン構文の記憶を取り戻す)には、RegExクイックリファレンスをご覧ください。
AutoHotkeyの正規表現は、www.pcre.orgのPerl-compatible Regular Expressions (PCRE)を使用して実装されています。
Within an expression, a ~= b
can be used as shorthand for RegExMatch(a, b)
.
RegExReplace, RegEx Quick Reference, Regular Expression Callouts, InStr, SubStr, SetTitleMatchMode RegEx, Global matching and Grep (forum link)
テキストデータの一般的なソース:FileRead, Download, A_Clipboard, GUI Edit controls
一般的なRegExの例については、RegExクイックリファレンスをご覧ください。
FoundPos := RegExMatch("Michiganroad 72", "(.*) (?<nr>\d+)", &SubPat) MsgBox SubPat.Count ":" SubPat[1] " " SubPat.Name[2] "=" SubPat.nr ; Displays "2: Michiganroad nr=72"
ファイルの拡張子を取得します。なお、SplitPathを使用することも可能で、そちらの方がより確実です。
Path := "C:\Foo\Bar\Baz.txt" RegExMatch(Path, "\w+$", &Extension) MsgBox Extension[] ; Reports "txt".
AutoHotkey v1のTransform Derefと同様に、他の変数内に含まれる変数参照やエスケープシーケンスを展開する機能を以下に示します。さらに、この例では、最初のマッチで停止するのではなく、文字列内のすべてのマッチを検索する方法を示しています(JavaScriptのRegExのgフラグに似ています)。
var1 := "abc" var2 := 123 MsgBox Deref("%var1%def%var2%") ; Reports abcdef123. Deref(Str) { spo := 1 out := "" while (fpo:=RegexMatch(Str, "(%(.*?)%)|``(.)", &m, spo)) { out .= SubStr(Str, spo, fpo-spo) spo := fpo + StrLen(m[0]) if (m[1]) out .= %m[2]% else switch (m[3]) { case "a":out .= "`a" case "b":out .= "`b" case "f":out .= "`f" case "n":out .= "`n" case "r":out .= "`r" case "t":out .= "`t" case "v":out .= "`v" default:out .= m[3] } } return out SubStr(Str, spo) }