/ /

チートシート — クリックで挿入

正規表現とは?

正規表現(regexまたはregexp)は、検索パターンを定義する文字のシーケンスです。文字列の検索、検証、テキストの抽出、置換に使用されます。正規表現は事実上すべてのプログラミング言語でサポートされており、テキスト処理を扱うすべての開発者にとって不可欠なツールです。

正規表現構文クイックリファレンス

  • . — 改行を除く任意の文字にマッチ
  • ^ / $ — 文字列(またはマルチラインモードでは行)の先頭 / 末尾
  • * / + / ? — 0回以上 / 1回以上 / 0回または1回
  • {n,m} — n回からm回の繰り返し
  • [abc] — 文字クラス — a、b、またはcにマッチ
  • [^abc] — 否定文字クラス
  • (abc) — キャプチャグループ
  • (?:abc) — 非キャプチャグループ
  • \d / \w / \s — 数字 / 単語文字 / 空白文字
  • a|b — 選択 — aまたはbにマッチ

一般的な正規表現パターン

  • メール: [\w.+-]+@[\w-]+\.[a-zA-Z]{2,}
  • URL: https?://[\w\-._~:/?#[\]@!$&'()*+,;=%]+
  • IPv4: (\d{1,3}\.){3}\d{1,3}
  • 電話番号(US): (\+1\s?)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}
  • 16進カラーコード: #([a-fA-F0-9]{6}|[a-fA-F0-9]{3})
  • 日付(YYYY-MM-DD): \d{4}-\d{2}-\d{2}

正規表現に関するよくある質問

正規表現の .* と .+ の違いは何ですか?

アスタリスク(*)は前の要素の「0回以上」を意味し、プラス(+)は「1回以上」を意味します。パターン .* は空文字列を含むあらゆる文字列にマッチしますが、.+ は少なくとも1文字必要です。どちらもデフォルトでは貪欲 — できるだけ多くマッチします。? を追加すると最短一致(できるだけ少なくマッチ)になります:.*?.+?

正規表現のフラグ g、i、m、s は何をしますか?

g(グローバル)フラグは最初のマッチで止まらずにすべてのマッチを見つけます。i フラグは大文字小文字を区別しないマッチにします。m(マルチライン)フラグは ^$ を文字列全体ではなく各行の先頭と末尾にマッチさせます。s(dotAll)フラグはドットを改行文字にもマッチさせます。フラグは必要に応じて組み合わせます:/pattern/gim

リテラルのドット、括弧、その他の特殊文字にマッチさせるにはどうすればいいですか?

特殊な正規表現文字はバックスラッシュでエスケープします。リテラルのドットは . です(バックスラッシュなしではドットは任意の文字にマッチします)。リテラルの括弧は () です。エスケープが必要なその他の文字: ^ $ | ? * + { } [ ]。例えば、URL example.com にリテラルでマッチさせるには /example.com/ と書きます — そうしなければドットは任意の文字にマッチしてしまいます。

貪欲量指定子と最短一致量指定子の違いは何ですか?

貪欲量指定子(*+{n,m})は全体のパターンがマッチする範囲でできるだけ多くマッチしようとします。最短一致(非貪欲)量指定子(*?+?{n,m}?)はできるだけ少なくマッチします。例えば、<b>bold</b> に対して、貪欲な /<.*>/ は文字列全体にマッチしますが、最短一致の /<.*?>/<b> のみにマッチします。

関連開発者ツール