正規表現 (正規表現) は、文字列に特定の部分文字列が含まれているかどうかを確認したり、一致した部分文字列を置換したり、特定の条件を満たす文字列から部分文字列を抽出したりするために使用できる文字列の一致パターンを記述します。
ディレクトリをリストする場合、dir *.txt または ls *.txt 内の *.txt は正規表現ではありません。これは、ここでの * の意味が正規表現の * とは異なるためです。
正規表現は、通常の文字(文字 a ~ z など)と特殊文字(メタキャラクターと呼ばれます)で構成されるテキスト パターンです。正規表現は、文字パターンと検索文字列を照合するテンプレートとして機能します。
3.1 通常の文字
は、メタキャラクターとして明示的に指定されていないすべての印刷文字と非印刷文字で構成されます。これには、すべての大文字と小文字のアルファベット、すべての数字、すべての句読点、および一部の記号が含まれます。
3.2 非印刷文字
cx | x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は、A ~ Z または a ~ z のいずれかでなければなりません。それ以外の場合、c はリテラルの「c」文字として扱われます。 |
f | フォーム フィードと一致します。 x0c および cL に相当します。 |
n | 改行文字と一致します。 x0a および cJ に相当します。 |
r | 復帰文字と一致します。 x0d および cM に相当します。 |
s | スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。 |
S | 空白以外の文字と一致します。 [^ fnrtv] に相当します。 |
t | はタブ文字と一致します。 x09 および cI に相当します。 |
v | 垂直タブ文字と一致します。 x0b および cK に相当します。 |
3.3 特殊文字
いわゆる特殊文字とは、特別な意味を持つ一部の文字のことで、上記の「*.txt」の * のように、単に任意の文字列の意味を意味します。ファイル名に * が含まれるファイルを検索する場合は、* をエスケープする、つまり * の前に 1 を追加する必要があります。 ls*.txt。正規表現には次の特殊文字があります。
$ | 入力文字列の終了位置と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は 'n' または 'r' にも一致します。 $ 文字そのものと一致させるには、$ を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
( ) | 部分式の開始と終了をマークします。部分式は後で使用するために取得できます。これらの文字と一致させるには、( と ) を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* | 直前の部分式と 0 回以上一致します。 * 文字と一致させるには、* を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ | 前の部分式と 1 回以上一致します。 + 文字と一致させるには、+ を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
. | 改行文字 n を除く任意の 1 文字と一致します。 . と一致させるには、 を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[ | は角括弧式の始まりを示します。 [ と一致させるには、[ を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? | 先行する部分式と 0 回または 1 回一致するか、非貪欲修飾子を指定します。 ? 文字に一致させるには、? を使用します。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。たとえば、「n」は文字「n」と一致します。 「n」は改行文字と一致します。シーケンス '\' は "" に一致し、'(' は "(" に一致します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
^ | は、角括弧式で使用されない限り、入力文字列の先頭に一致します。この場合、文字が受け入れられないコレクション。^ 文字自体を一致させるには、 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
を使用して修飾子式の開始をマークします。 |、使用します |
* | 前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,} に相当します。 |
+ | 前の部分式と 1 回以上一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。 + は {1,} と同等です。 |
? | 先行する部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「do」または「does」の「do」と一致します。 ? {0,1} に相当します。 |
{n} | n は負でない整数です。特定の回数 n 回一致します。たとえば、「o{2}」は「Bob」の「o」と一致できませんが、「food」の 2 つの o と一致します。 |
{n,} | n は負でない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」のすべての「o」と一致します。 「o{1,}」は「o+」と同等です。 「o{0,}」は「o*」と同等です。 |
{n,m} | m と n は両方とも非負の整数であり、n |
3.5 ロケーター
文字列または単語の境界を記述するために使用されます。^ と $ はそれぞれ文字列の先頭と末尾を指し、b は単語の前または後ろの境界を示し、Bは非単語境界を表します。修飾子はロケーターでは使用できません。
3.6
すべての選択項目を括弧で囲み、隣接する選択項目を | で区切ります。ただし、括弧を使用すると、関連する一致がキャッシュされるという副作用が生じます。この場合、最初のオプションの前に ?: を使用すると、この副作用を排除できます。
このうち、?: は非キャプチャ要素の 1 つで、他の 2 つの非キャプチャ要素は ?= と ?! です。この 2 つはより意味を持ち、括弧内の任意の開始と一致します。正規表現パターンは、正規表現パターンに一致しない任意の位置の検索文字列に一致します。後者は、正規表現パターンに一致しない任意の最初の位置にある検索文字列に一致します。
3.7 後方参照
正規表現パターンまたはパターンの一部を括弧で囲むと、関連付けられた一致が一時バッファに保存され、キャプチャされた各サブマッチが正規表現パターンの左から右にキャプチャされます。コンテンツが保存されます。部分一致が格納されるバッファには、1 から始まり、最大 99 個の部分式まで連続した番号が付けられます。各バッファーには、「n」を使用してアクセスできます。n は、特定のバッファーを識別する 1 桁または 2 桁の 10 進数です。
非キャプチャメタ文字「?:」、「?=」、または「?!」を使用して、関連する一致の保持を無視できます。
4. 各種演算子の操作優先度
同じ優先度の操作は左から右へ、異なる優先度の操作は高い順に実行されます。さまざまな演算子の優先順位は高い順に次のとおりです。
エスケープ文字 | |
()、(?:)、(?=)、[] | 丸めおよび角括弧 |
*、+、?、{n}、{n,}、{n,m} | 修飾子 |
^、$、anymetacharacter | 位置と順序 |
| | 「OR」演算 |
5. すべての記号の説明
次の文字を特殊文字、リテラル文字、後方参照、または 8 進エスケープ文字としてマークします。たとえば、「n」は文字「n」と一致します。 「n」は改行文字に一致します。シーケンス '\' は "" に一致し、"(" は "(" に一致します。 | |
^ | は入力文字列の先頭に一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、 ^ は 'n' にも一致します。 |
の後の 'r ' は、RegExp オブジェクトの Multiline プロパティが設定されている場合、入力文字列の末尾と一致します。 $ は、 'n' または 'r' の前の位置にも一致します | * |
? | は、前の部分式に 0 回または 1 回一致します。たとえば、「do(es)?」は、「do」または「does」の「do」に一致します。 " ? は {0,1} と同等です。 |
n は非負の整数です。特定の回数一致します。たとえば、'o{2}' は " Bob" ですが、"food" の 2 つの o と一致します。 | {n,}n は負ではない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「o」と一致できません「Bob」では「o{1,}」と一致しますが、「o+」は「o*」と同等です。 m} |
. | |
(パターン) | |
(?:pattern) | |
(?=pattern) | |
(?!pattern) | |
x|y | |
[xyz] | キャラクターコレクション。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。 |
[^xyz] | 負の値の文字のセット。含まれていない任意の文字と一致します。たとえば、「[^abc]」は「plain」の「p」と一致します。 |
[a-z] | 文字範囲。指定された範囲内の任意の文字と一致します。たとえば、「[a-z]」は、「a」から「z」の範囲内の任意の小文字の英字と一致します。 |
[^a-z] | 否定文字の範囲。指定された範囲内にない任意の文字と一致します。たとえば、「[^a-z]」は、「a」から「z」の範囲にない任意の文字と一致します。 |
b | 単語とスペースの間の位置を指す単語境界に一致します。たとえば、「erb」は「never」の「er」と一致しますが、「verb」の「er」とは一致しません。 |
B | 単語以外の境界と一致します。 「erB」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。 |
cx | x で指定された制御文字と一致します。たとえば、cM は Control-M または復帰文字と一致します。 x の値は、A ~ Z または a ~ z のいずれかでなければなりません。それ以外の場合、c はリテラルの「c」文字として扱われます。 |
d | 数字と一致します。 [0-9]に相当します。 |
D | 数字以外の文字と一致します。 [^0-9] と同等。 |
f | フォーム フィードと一致します。 x0c および cL に相当します。 |
n | 改行文字と一致します。 x0a および cJ に相当します。 |
r | 復帰文字と一致します。 x0d および cM に相当します。 |
s | スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。 |
S | 空白以外の文字と一致します。 [^ fnrtv] に相当します。 |
t | はタブ文字と一致します。 x09 および cI に相当します。 |
v | 垂直タブ文字と一致します。 x0b および cK に相当します。 |
w | アンダースコアを含む任意の単語文字と一致します。 「[A-Za-z0-9_]」と同等。 |
W | 単語以外の文字と一致します。 「[^A-Za-z0-9_]」と同等。 |
xn | n と一致します。n は 16 進数のエスケープ値です。 16 進数のエスケープ値は、正確に 2 桁の長さである必要があります。たとえば、「x41」は「A」と一致します。 「x041」は「x04」および「1」と同等です。 ASCII エンコーディングは正規表現で使用できます。 . |
num | num と一致します。ここで、num は正の整数です。取得した一致への参照。たとえば、「(.)1」は、連続する 2 つの同一の文字に一致します。 |
n | 8 進エスケープ値または後方参照を識別します。 n の前に少なくとも n 個のフェッチされた部分式がある場合、n は後方参照になります。それ以外の場合、n が 8 進数 (0 ~ 7) の場合、n は 8 進数のエスケープ値になります。 |
nm | 8 進エスケープ値または後方参照を識別します。 nm の前に少なくとも nm 個の取得可能な部分式がある場合、nm は後方参照になります。 nm の前に少なくとも n が取得されている場合、n は後方参照であり、その後にリテラル m が続きます。前述の条件がいずれも当てはまらない場合、n と m が両方とも 8 進数 (0 ~ 7) である場合、nm は 8 進数のエスケープ値 nm と一致します。 |
nml | n が 8 進数 (0 ~ 3) で、m と l が両方とも 8 進数 (0 ~ 7) である場合、8 進数のエスケープ値 nml と一致します。 |
un | は n と一致します。n は 4 桁の 16 進数で表される Unicode 文字です。たとえば、u00A9 は著作権記号 (?) に一致します。 |
6. いくつかの例
/b([a-z]+) 1b/gi | 単語が連続して現れる位置 |
URL をプロトコル、ドメイン、ポート、および相対パスに解決します | |
章の位置を特定します | |
A から z、合計 26 文字と - 記号。 | |
Chapter には一致しますが、terminal には一致しません | |
Chapter には一致しますが、aptitude には一致しません | |
Windows95、Windows98、または WindowsNT と一致する場合は、Windows | の後ろから次のものを起動します。 |