技術資料

正規表現入門:貪欲マッチと非貪欲マッチの違い

作成日:2025.08.31

正規表現の基本的な挙動のひとつである「貪欲マッチ」と「非貪欲マッチ」の違いを、具体例とともに分かりやすく解説します。各マッチング方法がどのように働くかを実践的なコード例を交えながら説明し、用途に合わせた使い分けのポイントを紹介します。

error この記事は最終更新日から1年以上が経過しています。

貪欲マッチ (Greedy Match)

貪欲マッチは、可能な限り多くの文字をマッチさせる動作を指します。正規表現の量指定子(例えば、*、+、{n,})はデフォルトで貪欲マッチとして動作します。

例えば、以下のような文字列があるとします。

竜王戦[[title01]]\n名人戦[[title02]]\n叡王戦[[title03]]\n王位戦[[title04]]\n王座戦[[title05]]\n棋聖戦[[title06]]\n棋王戦[[title07]]\n王将戦[[title08]]\n

この中から「[[」と「]]」で囲まれた部分を抽出したいと考え、、以下のような正規表現を使用した場合、

\[\[(.*)\]\]

貪欲マッチのため、最初の「[[」から最後の「]]」までがマッチしてしまい、結果として以下のように一つの大きなマッチが得られます。

竜王戦[[title01]]\n名人戦[[title02]]\n叡王戦[[title03]]\n王位戦[[title04]]\n王座戦[[title05]]\n棋聖戦[[title06]]\n棋王戦[[title07]]\n王将戦[[title08]]\n

非貪欲マッチ (Non-Greedy Match)

非貪欲マッチは、可能な限り少ない文字をマッチさせる動作を指します。量指定子に?を追加することで非貪欲マッチを実現できます。

先ほどと同じ文字列に対して、以下のような正規表現を使用した場合、

\[\[(.*?)\]\]

非貪欲マッチのため、最初の「[[」から直近の「]]」までがマッチし、結果として以下のように複数のマッチが得られます。

竜王戦[[title01]]\n名人戦[[title02]]\n叡王戦[[title03]]\n王位戦[[title04]]\n王座戦[[title05]]\n棋聖戦[[title06]]\n棋王戦[[title07]]\n王将戦[[title08]]\n

このように、非貪欲マッチを使用することで、必要な部分だけを正確に抽出することができます。

まとめ

貪欲マッチは可能な限り多くの文字をマッチさせるのに対し、非貪欲マッチは可能な限り少ない文字をマッチさせます。正規表現を使用する際には、目的に応じてこれらのマッチング方法を使い分けることが重要です。

正規表現の“貪欲/非貪欲”を理解して効果的に活用したい方へ

本記事では、正規表現における「貪欲マッチ」と「非貪欲マッチ」の違いを実践的なコード例を交えて解説しました。フォーム入力の検証やログ解析、文字列抽出などで「思った通りにマッチしない」「意図しない文字を含んでしまう」とお困りの方に役立ちます。

たとえば、以下のような課題をお持ちの方にサポート可能です:

  • PHP/JavaScript環境での正規表現パターン設計および修正
  • バックエンド・管理画面でのログやテキストデータから必要な情報のみを抽出する仕組みの導入
  • 既存システムで正規表現による処理が意図通り動いていない場合の原因分析と改善提案

「正規表現の動作をきちんと把握してから開発したい」「抽出処理を安定化させたい」とお考えの方は、ぜひお気軽にご相談ください。設計段階から実装、運用まで丁寧にご支援いたします。

mail ご相談・お問い合わせはこちらから 

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。

PHPの正規表現で日本語・改行を扱う:u・m・s修飾子の違い

2026.09.29

PHPの正規表現で日本語や複数行テキストを扱う際の、u・m・s修飾子の違いを解説します。Unicode文字クラスと全角数字、CRLFの行末処理、\A・\zの使い方、Unicode正規化との違いを、PHP 8.3.15・PCRE2 10.42で確認したコード例とともに紹介します。

PHP 正規表現

PHPの正規表現を使い分ける:preg_match・preg_match_all・preg_replaceと入力検証

2026.08.28

PHPのpreg_match、preg_match_all、preg_replaceを使い、一致した値の取り出し、複数箇所の抽出、文字列置換を行う方法を解説します。u修飾子やmb_check_encodingにも触れ、メールアドレスの形式検証では、正規表現やfilter_var()だけで到達性・所有確認まではできないことを説明します。

PHP 正規表現

perl正規表現の基本:マッチした文字列を配列に格納する方法

2010.07.16

perlで正規表現を用いて、特定の条件にマッチした文字列を配列に格納する方法を解説します。数字抽出を例に、正規表現を使って特定パターンの文字列をリストとして管理する基本テクニックを紹介。

Perl 正規表現

正規表現のメタ文字一覧とその使い方

2009.04.10

正規表現を使う際に知っておくべき基本的なメタ文字をまとめました。各メタ文字がどのように機能し、どんな場面で活用できるかを簡潔に解説します。

正規表現

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP