正規表現例

単純な式

正規表現の最も単純な形式は、検索文字列内でそれ自体にマッチする単一の通常文字です。

たとえば、a のような単一文字パターンは、検索文字列のどこに現れても常に文字 a にマッチします。以下は、単一文字の正規表現パターンの例です。

例

/a/
/b/
/c/

試してみる »

この正規表現は文字列 "abc" に正確にマッチします。テキスト内のどこに現れても、"abc" と完全に一致した場合のみ成功します。

これは非常に単純な例です。文字列 "abc" 自体には特別なメタ文字やパターンがないため、追加のエスケープや量指定子を使わずに正規表現として直接使用できます。

文字のマッチング

ワイルドカード.

ドット.改行以外の任意の1文字にマッチします。\nと\r次の正規表現は aac、abc、acc、adc など、および a1c、a2c、a-c、a#c にマッチします:

ファイル名を含む文字列にマッチさせたい場合、ピリオド.が入力文字列の一部であるなら、正規表現内のピリオドの前にバックスラッシュ\文字を付けます。例として、次の正規表現は filename.ext にマッチします:

/filename\.ext/

量指定子*

直前の要素に0回以上マッチします:

この式は "b"、"ab"、"aab"、"aaab" などの文字列にマッチします。

量指定子+

直前の要素に1回以上マッチします:

この式は "ab"、"aab"、"aaab" などの文字列にはマッチしますが、"b" にはマッチしません。

量指定子?

直前の要素に0回または1回マッチします:

例

/colou?r/

試してみる »

この式は "color" または "colour" にマッチします。

以上は、一般的な単一文字パターンのマッチング例です。これらは、異なるパターンの文字列を柔軟にマッチングおよび検索するために使用できます。

正規表現の構文はプログラミング言語やツールによって異なる場合があるため、実際に使用する際は対応するドキュメントを参照してください。


合理的なユーザー名の正規表現

ユーザー名には次の文字を含めることができます:

  • 1. 26個の英大文字と英小文字は、次のように表されますa-zA-Z。
  • 2. 数字は、次のように表されます0-9。
  • 3. アンダースコアは、次のように表されます_。
  • 4. ハイフンは、次のように表されます-。

したがって、使用する必要があります+を表します11回以上の出現。

上記の条件に基づいて、ユーザー名の式は次のようになります:

[a-zA-Z0-9_-]+

例

var str = "abc123-_def"; var patt = /[a-zA-Z0-9_-]+/; document.write(str.match(patt));

以下にマークされたテキストは、取得されたマッチングの式です:

abc123-_def

試してみる »

ハイフンが不要な場合は、次のようになります:

[a-zA-Z0-9_]+

例

var str = "abc123def"; var str2 = "abc123_def"; var patt = /[a-zA-Z0-9_]+/; document.write(str.match(patt)); document.write(str2.match(patt));

以下にマークされたテキストは、取得されたマッチングの式です:

abc123def
abc123_def

試してみる »

HTML タグとコンテンツのマッチング

次の正規表現は iframe タグのマッチングに使用されます:

/<iframe(([\s\S])*?)<\/iframe>/

他のタグのマッチングは置き換えることができますiframe 。

id="mydiv" の div タグにマッチします:

/<div id="mydiv"(([\s\S])*?)<\/div>/

すべての img タグにマッチします:

例

/<img.*?src="(.*?)".*?\/?>/gi

試してみる »

角括弧式

文字グループをマッチングするリストを作成するには、角括弧[ ]内に1つ以上の単一文字を置きます。文字が角括弧内にある場合、そのリストは「角括弧式」と呼ばれます。他の場所と同様に、通常の文字は角括弧内ではそれ自体を表し、つまり入力テキスト内でそれ自体に1回マッチします。ほとんどの特殊文字は、角括弧式内に現れるとその意味を失います。ただし、いくつかの例外もあります。例えば:

  • もし]文字が最初の項目でない場合、その文字はリストを終了します。リスト内の]文字にマッチさせるには、その文字を最初の位置、開始[の直後に置きます。
  • \文字は引き続きエスケープ文字として機能します。マッチさせるには\文字を使用してください\\。

角括弧式内の文字は、正規表現内のその位置にある単一の文字にのみマッチします。次の正規表現は、Chapter 1、Chapter 2、Chapter 3、Chapter 4、Chapter 5 にマッチします:

/Chapter [12345]/

単語 Chapter とそれに続くスペースの位置は、角括弧内の文字に対して固定されていることに注意してください。角括弧式が指定するのは、単語 Chapter とスペースの直後に続く単一の文字位置にマッチする文字セットのみです。これは9番目の文字位置です。

文字自体の代わりに範囲を使用してマッチする文字グループを表すには、ハイフン-を使用して範囲の開始文字と終了文字を区切ります。単一文字の文字値が範囲内の相対的な順序を決定します。次の正規表現には範囲式が含まれており、その範囲式は上に示した角括弧内のリストと同等です。

/Chapter [1-5]/

このように範囲を指定する場合、開始値と終了値の両方が範囲に含まれます。重要な点として、Unicode の並び順で、開始値は終了値よりも前に来る必要があります。

角括弧式にハイフンを含めるには、次のいずれかの方法を使用します:

  • バックスラッシュでエスケープします:
    [\-]
  • ハイフンを角括弧リストの先頭または末尾に置きます。次の式は、すべての小文字とハイフンにマッチします:
    [-a-z]
    [a-z-]
    
  • 開始文字値がハイフンより小さく、終了文字値がハイフン以上である範囲を作成します。次の2つの正規表現はどちらもこの要件を満たします:
    [!--]
    [!-~]
    

リストまたは範囲に含まれないすべての文字を検索するには、キャレット^をリストの先頭に置きます。挿入文字がリスト内の他の位置に現れた場合、それはそれ自体にマッチします。次の正規表現は、1、2、3、4、または5以外の任意の数字と文字にマッチします:

/Chapter [^12345]/

上の例では、式は9番目の位置で 1、2、3、4、または5以外の任意の数字と文字にマッチします。したがって、たとえば Chapter 7 はマッチであり、Chapter 9 もマッチです。

上の式はハイフンを使用して-表すことができます:

/Chapter [^1-5]/

角括弧式の典型的な用途は、任意の大文字または小文字、または任意の数字のマッチングを指定することです。次の式はそのようなマッチングを指定します:

/[A-Za-z0-9]/

置換とグループ化

置換では|文字を使用して、2つ以上の置換オプションから選択できるようにします。たとえば、章見出しの正規表現を拡張して、章見出しの範囲よりも広いマッチを返すことができます。ただし、これは思ったほど単純ではありません。置換はマッチします|文字のどちら側にある最大の式に。

次の式は、行頭と行末に出現し、その後に1桁または2桁の数字が続く Chapter または Section にマッチすると思うかもしれません:

/^Chapter|Section [1-9][0-9]{0,1}$/

残念ながら、上記の正規表現は行頭の単語 Chapter または行末の単語 Section とそれに続く任意の数字のどちらかにマッチします。入力文字列が Chapter 22 の場合、上記の式は単語 Chapter のみにマッチします。入力文字列が Section 22 の場合、その式は Section 22 にマッチします。

正規表現をより制御しやすくするには、括弧を使用して置換の範囲を制限できます。つまり、それが2つの単語 Chapter と Section にのみ適用されるようにします。ただし、括弧はサブ式を作成し、後で使用するためにそれらをキャプチャする可能性があることにも注意してください。これについては後方参照の節で説明します。上記の正規表現の適切な位置に括弧を追加することで、その正規表現を Chapter 1 または Section 3 にマッチさせることができます。

次の正規表現は括弧を使用して Chapter と Section をグループ化し、式が正しく機能するようにします:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

これらの式は正常に機能しますが、Chapter|Section の周りの括弧は、後の使用のために2つのマッチした単語のいずれかもキャプチャします。上の式には括弧のグループが1つしかないため、キャプチャされる「サブマッチ」は1つだけです。

上記の例では、括弧を使用して単語 Chapter と Section の間の選択肢をグループ化するだけです。一致を保存して将来使用しないようにするには、括弧内の正規表現パターンの前に配置します。?:。次の変更は、サブマッチを保存せずに同じ機能を提供します。

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

除 ?:メタ文字の他に、2つの他の非キャプチャメタ文字は「予測先読み」マッチと呼ばれるものを作成します。正の予測先読みは?=指定し、括弧内の正規表現パターンに一致する検索文字列の開始点に一致します。負の予測先読みは?!指定し、正規表現パターンに一致しない文字列の開始点にある検索文字列に一致します。

例えば、Windows 3.1、Windows 95、Windows 98、Windows NT への参照を含むドキュメントがあるとします。さらに、そのドキュメントを更新して、Windows 95、Windows 98、Windows NT へのすべての参照を Windows 2000 に変更する必要があるとします。次の正規表現(これは正の予測先読みの例です)は、Windows 95、Windows 98、Windows NT に一致します。

/Windows(?=95 |98 |NT )/

一致が見つかると、一致したテキスト(予測先読み内の文字を除く)の直後から次の一致を検索します。例えば、上記の式が Windows 98 に一致する場合、98 の後ではなく Windows の後から検索を続けます。

その他の例

以下にいくつかの正規表現の例を示します:

正規表現 説明
/\b([a-z]+) \1\b/gi 単語が連続して出現する位置。
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ URL をプロトコル、ドメイン、ポート、相対パスに解析して一致します。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 章の位置を特定します。
/[-a-z]/ a から z までの26文字に加えて1つの-号。
/ter\b/ chapter に一致しますが、terminal には一致しません。
/\Bapt/ chapter に一致しますが、aptitude には一致しません。
/Windows(?=95 |98 |NT )/ Windows95 または Windows98 または WindowsNT に一致します。一致が見つかった後、Windows の後ろから次の検索一致を開始します。
/^\s*$/ 空行に一致します。
/\d{2}-\d{5}/ 2桁の数字、ハイフン、その後の5桁の数字で構成される ID 番号を検証します。
<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*?> HTML タグに一致します。
正規表現説明
hello {hello} に一致します。
gray|grey {gray, grey} に一致します。
gr(a|e)y {gray, grey} に一致します。
gr[ae]y {gray, grey} に一致します。
b[aeiou]bble {babble, bebble, bibble, bobble, bubble} に一致します。
[b-chm-pP]at|ot {bat, cat, hat, mat, nat, oat, pat, Pat, ot} に一致します。
colou?r {color, colour} に一致します。
rege(x(es)?|xps?) {regex, regexes, regexp, regexps} に一致します。
go*gle {ggle, gogle, google, gooogle, goooogle, ...} に一致します。
go+gle {gogle, google, gooogle, goooogle, ...} に一致します。
g(oog)+le {google, googoogle, googoogoogle, googoogoogoogle, ...} に一致します。
z{3} {zzz} に一致します。
z{3,6} {zzz, zzzz, zzzzz, zzzzzz} に一致します。
z{3,} {zzz, zzzz, zzzzz, ...} に一致します。
[Bb]rainf\*\*k {Brainf**k, brainf**k} に一致します。
\d {0,1,2,3,4,5,6,7,8,9} に一致します。
1\d{10} 1 で始まる11桁の数字に一致します。
[2-9]|[12]\d|3[0-6] 2 から 36 の範囲の整数に一致します。
Hello\nworld Hello の後に改行、その後に world が続くものに一致します。
\d+(\.\d\d)? 正の整数、または小数位2桁の浮動小数点数を含みます。
[^*@#] *、@、# の3つの特殊記号を除外します。
//[^\r\n]*[\r\n] 一致//で始まるコメント
^dog "dog" で始まるものに一致します。
dog$ "dog" で終わるものに一致します。
^dog$ is exactly "dog"

さらに多くの例

  • 中国語の正規表現

  • ナンバープレート番号の正規表現

  • 微信(WeChat)ID の正規表現

  • QQ 番号の正規表現

  • 16進色の正規表現

  • パスワード強度の正規表現

  • ユーザー名の正規表現

  • メールアドレスの正規表現

その他の拡張