RegExMatch()

文字列中から正規表現パターンに一致する箇所を検索し、位置を返す

RegExMatch(Target, Pattern [, OutputVar = "", StartingPos = 1])

Parameters

引数名説明
Target 検索対象となる文字列
Pattern 検索する正規表現パターン。詳細は正規表現の項を参照。
オプションはパターンの前に「)」で区切って記述する(例:「im)\.jpe?g$」)
オプションがない場合は、「)」は不要。(例:「\.JPE?G$」)
OutputVar 「()」などで囲まれた式集合マッチしたサブマッチ文字列を格納する変数を指定する。
この変数自体には、正規表現全体がマッチした内容が格納される。
この変数の名前のあとに、「(」の出現順に対応した番号を付けた名前の変数に、その「()」内の正規表現に一致した文字列が格納される。
マッチしなかったものについては、長さ0の文字列になる。
例えば、「RegExMatch("2006-11-06","(\d\d\d\d)-(\d\d)-(\d\d)",$)」とすると、「$」変数には「2006-11-06」が、「$1」変数には「2006」が、「$2」変数には「11」が、「$3」変数には「06」が格納される。
名前付き捕獲式集合を使用した場合は、順番を表す数字の代わりにその名前が使われる。この場合、番号自体は増やされるが、番号に対応する変数には値が格納されない。
例えば、「RegExMatch("2006-11-06","(?P<Year>\d{4})-(\d{2})-(\d{2})",$)」とすると、「$Year」変数には「2006」が、「$2」変数には「11」が、「$3」変数には「06」が格納される。「$1」変数には何の変化も起こらず、前の値が維持される。
StartingPos Target内での検索を開始する位置。先頭は「1」。
Targetの文字数より大きい値を指定した場合は、空の文字列(Targetの最後の0文字の範囲)に対し検索が行われる(通常はなにもマッチしない)。
0以下の値を指定した場合は、文字列の末尾から指定文字数分の範囲が検索される。
例えば、「0」を指定した場合は、文字列の最後の1文字だけが、「-1」を指定した場合、後ろの2文字が検索される。
Targetの長さを超える場合は、Target全体が検索される。
省略時は「1」(Targetの先頭から検索)。

RegExMatch()固有のオプション

Patternの最初に付加できるオプションの内、RegExMatch()のみで有効なものは以下の通りである。
RegExReplace()と共通のものについては、正規表現の項を参照。

P
OutputVar変数群に格納される情報を、マッチした文字列自体ではなく、文字列の出現位置と長さにする。
OutputVar自体は、正規表現全体がマッチした長さになる。
各サブマッチ文字列のTarget先頭から数えた位置が「OutputVarPos1」「OutputVarPos2」などに、各サブマッチ文字列の長さが「OutputVarLen1」「OutputVarLen2」などに格納される。
名前付き捕獲式集合を使用した場合は、「OutputVarPosYear」「OutputVarLenYear」などに格納される。
マッチしなかったものについては、位置・サイズ共に「0」になる。
例えばRegExMatch("2006-11-06","P)(?P<Year>\d{4})-(\d{2})-(\d{2})",Match)とすると、「Match」には「10」が、「MatchPosYear」に「1」が、「MatchLenYear」に「4」が、「MatchPos2」に「6」が、「MatchLen2」に「2」が、「MatchPos3」に「9」が、「MatchLen3」に「2」が格納される。

返り値

Targetの先頭から数えた、パターンに一致する箇所の一番最初の出現位置。
文字列の先頭は「1」。
見つからなかった場合は「0」になる。
エラーで検索が行われなかった場合は、長さゼロの文字列になる。

ErrorLevel

正常に検索が行われた場合は、「0」。
エラーで検索が行われなかった場合は、以下の値になる。

Compile error N at offset M:Description
正規表現の文法エラー。 Nはエラー番号、Mは問題の発生した箇所(Patternの先頭が「1」)、Descriptionは簡単な説明。
その他の負の数値
マッチ処理中に発生したエラー。
正規表現自体は正しいが、処理に必要なメモリが確保しきれないなどの問題があったときに発生する。

Related

RegExReplace(), InStr(), IfInString, StringGetPos, SetTitleMatchMode RegEx

Examples

FoundPos := RegExMatch("xxxabc123xyz", "abc.*xyz")  ; Returns 4, which is the position where the match was found.
FoundPos := RegExMatch("abc123123", "123$")  ; Returns 7 because the $ requires the match to be at the end.
FoundPos := RegExMatch("abc123", "i)^ABC")  ; Returns 1 because a match was achieved via the case-insensitive option.
FoundPos := RegExMatch("abcXYZ123", "abc(.*)123", SubPat)  ; Returns 1 and stores "XYZ" in SubPat1.
FoundPos := RegExMatch("abc123abc456", "abc\d+", "", 2)  ; Returns 7 instead of 1 due to StartingPos 2 vs. 1.