【C#】大文字と小文字を区別せずに正規表現で検索する (RegexOptions.IgnoreCase)

C#の正規表現(Regex)は、デフォルトでは大文字と小文字を厳密に区別します(例:"Apple""apple" は別物として扱われます)。

ユーザー入力の揺らぎを許容したい場合など、これらを区別せずにマッチさせるには、RegexOptions.IgnoreCase オプションを指定します。

目次

SQLキーワード検索の実装例

以下のサンプルコードでは、SQL文の中に含まれる予約語(SELECT, FROM, WHERE など)を、大文字・小文字の書き方に関わらずすべて抽出しています。

サンプルコード

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        // 解析対象の文字列(SQLクエリ)
        // 大文字(SELECT)、小文字(where)、混在(From)が混ざっている状態
        string sqlQuery = "SELECT id, name From users where active = 1 AND role = 'admin'";

        Console.WriteLine($"対象クエリ: {sqlQuery}\n");

        // 検索したいキーワードのパターン
        // \b : 単語の境界
        string pattern = @"\b(select|from|where|and)\b";

        // ---------------------------------------------------------
        // 第3引数に RegexOptions.IgnoreCase を指定
        // これにより "select" というパターンで "SELECT" にもヒットするようになる
        // ---------------------------------------------------------
        MatchCollection matches = Regex.Matches(sqlQuery, pattern, RegexOptions.IgnoreCase);

        Console.WriteLine($"--- 発見したキーワード (計{matches.Count}個) ---");

        foreach (Match m in matches)
        {
            // m.Value : 実際にマッチした文字列(元の文字列のまま)
            // m.Index : 発見した位置
            Console.WriteLine($"位置 {m.Index, 2}: {m.Value}");
        }
    }
}

実行結果

対象クエリ: SELECT id, name From users where active = 1 AND role = 'admin'

--- 発見したキーワード (計4個) ---
位置  0: SELECT
位置 16: From
位置 27: where
位置 44: AND

解説と技術的なポイント

1. RegexOptions.IgnoreCase

Regex.MatchesRegex.IsMatch などのメソッドには、第3引数(または第2引数)として RegexOptions 列挙体を受け取るオーバーロードが存在します。ここに RegexOptions.IgnoreCase を渡すことで、アルファベットの Aa を等価として扱います。

2. インラインオプション (?i)

コード側でオプションを指定する代わりに、正規表現パターンの中にオプションを埋め込む記法もあります。 パターンの先頭に (?i) を記述すると、それ以降の部分は大文字小文字を区別しなくなります。

// コードでの指定なしで、大文字小文字を無視するパターン
var matches = Regex.Matches(text, @"(?i)\b(select|from)\b");

この方法は、使用するライブラリの制限などで RegexOptions を引数に渡せない場合や、パターン文字列だけで挙動を完結させたい場合に有効です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次