RegExReplace

文字列の中にあるパターン(正規表現)の出現箇所を置き換えます。

NewStr := RegExReplace(Haystack, NeedleRegEx , Replacement, &OutputVarCount, Limit, StartingPos)

パラメータ

Haystack

型:文字列

内容を検索・置換する文字列。バイナリーゼロを含む場合があります。

NeedleRegEx

型:文字列

検索するパターンで、Perl互換正規表現(PCRE)です。パターンのオプションがある場合は、文字列の先頭に含める必要があり、その後に閉じ括弧が続きます。例えば、i)abc.*123というパターンは、大文字小文字を区別しないオプションをオンにし、"abc "の後に任意の文字が0回以上出現し、その後に "123 "が続くものを検索対象とします。オプションがない場合、")"はオプションです。例えば、)abcは abcと同等です。

NeedleRegExはバイナリーゼロを含むことができませんが、Haystack内のバイナリーゼロに一致させるために、パターン\x00を使用することができます。

置換

型:文字列

If blank or omitted, NeedleRegEx will be replaced with blank (empty), meaning it will be omitted from the return value. Otherwise, specify the string to be substituted for each match, which is plain text (not a regular expression).

This parameter may include backreferences like $1, which brings in the substring from Haystack that matched the first subpattern. 最も単純な後方参照は$0から$9で、$0はパターン全体に一致した部分文字列、$1は最初の部分パターンに一致した部分文字列、$2は2番目、といった具合になります。For backreferences greater than 9 (and optionally those less than or equal to 9), enclose the number in braces; e.g. ${10}, ${11}, and so on. 名前付きサブパターンの場合は、名前を中括弧で囲みます(例:${SubpatternName})。リテラルで$を指定する場合は$$を使用します(このような特別な扱いが必要な文字はこの文字だけで、バックスラッシュは何もエスケープする必要はありません)。

サブパターンの大文字と小文字を変換するには、$の後に次のいずれかの文字を記述します:Uまたはu(大文字)、Lまたはl(小文字)、Tまたはt(タイトルケース、各単語の最初の文字を大文字にし、他を小文字にしたもの)。例えば、$U1と$U{1}は、どちらも最初のサブパターンの大文字を転写する。

存在しない後方参照や、Haystackで何もマッチしなかったもの(abc)|(xyz)のサブパターンの1つなど)は、空文字列として書き出されます。

&OutputVarCount

型:VarRef

省略したときは、対応する値は保存されません。そうでない場合は、置換が発生した回数を格納する出力変数への参照を指定する(何もない場合は0)。

Limit

型:整数

If omitted, it defaults to -1, which replaces all occurrences of the pattern found in Haystack. それ以外の場合は、置換を許可する最大数を指定します。ヘイスタックの右側はそのまま。

StartingPos

型:整数

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 replacements).

負のStartingPosを指定すると、その位置で右からスタートする。例えば、-1は最後の文字から、-2はその次の文字から始まります。StartingPosHaystackの左端を越えようとした場合、Haystackの全てが検索される。

0を指定すると、Haystackの末尾、つまり最後の文字の右側の位置から開始します。これは、(?<=a)のようなゼロ幅のアサーションで使用することができます。

StartingPosの値にかかわらず、戻り値は常にHaystackの完全なコピーです。唯一の違いは、StartingPosが1の場合に起こるであろうことと比較して、その左側の多くが変更されていないかもしれないということです。

戻り値

型:文字列

この関数は、操作によって内容が置換されたバージョンのHaystackを返します。交換の必要がない場合は、Haystackはそのまま返却されます。

エラー

以下の場合、Errorがスローされます:

詳しくは、「RegExMatch」をご覧ください。

Options

See RegEx Quick Reference for options such as i)abc, which turns off case-sensitivity.

パフォーマンス

単純な部分文字列の置換には、RegExReplaceよりも高速なStrReplaceを使用します。

最大置換数がわかっている場合、Limitパラメータにそれを指定すると、検索を早期に停止できるため、パフォーマンスが向上します(これにより、操作中のシステムのメモリ負荷も軽減される可能性があります)。例えば、大きな文字列の先頭付近に1つしかマッチしないことが分かっている場合、制限値1を指定します。

パフォーマンスを向上させるため、最近使用された100個の正規表現をメモリ上にキャッシュしておく(コンパイルされた状態)。

学習オプション(S)は、(ループ内などで)何度も使用される正規表現のパフォーマンスを向上させることができる場合があります。

備考

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クイックリファレンスをご覧ください。

RegExMatch, RegEx Quick Reference, Regular Expression Callouts, StrReplace, InStr

テキストデータの一般的なソース:FileRead, Download, A_Clipboard, GUI Edit controls

一般的なRegExの例については、RegExクイックリファレンスをご覧ください。

"abc123xyz" を報告するのは、$が末尾にのみマッチングを許可しているからです。

MsgBox RegExReplace("abc123123", "123$", "xyz")

大文字小文字を区別しないオプションで一致したため、"123 "を報告します。

MsgBox RegExReplace("abc123", "i)^ABC")

1ドルのバックリファレンスによって「aaaXYZzzz」を報告する。

MsgBox RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz")

空文字列を報告し、ReplacementCountに2を格納します。

MsgBox RegExReplace("abc123abc456", "abc\d+", "", &ReplacementCount)