C#の正規表現における数量詞の使い方を一覧表で解説
C# 正規表現における数量詞とは
C# の正規表現における数量詞(Quantifier)は、直前の要素(1 文字、グループ、または文字クラス)が入力文字列の中で何回出現すれば一致とみなされるかを指定するための記号です。数量詞を使いこなすことで、「数字が 3 桁続く部分」や「特定の文字が 0 回以上繰り返される部分」といった柔軟なパターンマッチングが可能になります。
数量詞の一覧表
| 数量詞 | 説明 | パターン | 一致例 |
|---|---|---|---|
| * | 直前の要素に 0 回以上一致します。 | \d*\.\d | ".0"、"19.9"、"219.9" |
| + | 直前の要素に 1 回以上一致します。 | "be+" | "been" 内の "bee"、"bent" 内の "be" |
| ? | 直前の要素に 0 回または 1 回一致します。 | "rai?n" | "ran"、"rain" |
| { n } | 直前の要素にちょうど n 回一致します。 | ",\d{3}" | "1,043.6" 内の ",043"、"9,876,543,210" 内の ",876"、",543"、",210" |
| { n } | 直前の要素に n 回以上一致します。 | "\d{2}" | "166"、"29"、"1930" |
| { n , m } | 直前の要素に n 回以上、m 回以下で一致します。 | "\d{3,5}" | "193024" 内の "166"、"17668"、"19302" |
| *? | 直前の要素に 0 回以上、できるだけ少ない回数で一致します(最短一致)。 | \d*?\.\d | ".0"、"19.9"、"219.9" |
| +? | 直前の要素に 1 回以上、できるだけ少ない回数で一致します(最短一致)。 | "be+?" | "been" 内の "be"、"bent" 内の "be" |
| ?? | 直前の要素に 0 回または 1 回、できるだけ少ない回数で一致します(最短一致)。 | "rai??n" | "ran"、"rain" |
| { n }? | 直前の要素にちょうど n 回一致します。 | ",\d{3}?" | "1,043.6" 内の ",043"、"9,876,543,210" 内の ",876"、",543"、",210" |
| { n }? | 直前の要素に n 回以上、できるだけ少ない回数で一致します(最短一致)。 | "\d{2}?" | "166"、"29"、"1930" |
| { n , m }? | 直前の要素に n 回から m 回の間で、できるだけ少ない回数一致します(最短一致)。 | "\d{3,5}?" | "193024" 内の "166"、"17668"、"193"、"024" |
最長一致(貪欲型)と最短一致(遅延型)の違い
数量詞には、通常の「最長一致(貪欲型 / Greedy)」と、末尾に ? を付けた「最短一致(遅延型 / Lazy)」の 2 種類があります。
- 最長一致(Greedy):条件を満たす限り、できるだけ多くの文字に一致しようとします。
- 最短一致(Lazy):条件を満たす最小限の文字だけに一致します。
たとえばパターン \d{3,5} は文字列 "193024" に対して最大 5 桁の "19302" に一致しますが、\d{3,5}? では最小限の 3 桁である "193" に一致します。このように、同じ数量詞でも ? を付けるかどうかでマッチ結果が変わる点に注意しましょう。
C# での使用例
実際に C# コードで数量詞を使ったマッチングを行う例を紹介します。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "9,876,543,210";
MatchCollection matches = Regex.Matches(input, @",\d{3}");
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
// 出力: ,876 / ,543 / ,210
}
}
}
このように Regex.Matches メソッドと組み合わせることで、カンマ区切りの 3 桁の数字を簡単に抽出できます。用途に応じて最長一致と最短一致を使い分けることが、正確なテキスト処理のポイントです。
-
JavaScriptの正規表現修飾子(g・i・m)をサンプルコード付きで解説
JavaScriptの正規表現修飾子とは JavaScriptの正規表現における修飾子(フラグ)とは、パターンリテラルの末尾に付加することで検索の挙動を変更できる、省略可能な指定のことです。これを使うことで、大文字と小文字を区別しない検索や文字列全体を対象としたグローバル検索などが簡単に実現できます。さらに、複数の修飾子を組み合わせて指定することも可能です。 主な修飾子の一覧 修飾子説明 gグローバルマッチングを有効にします。最初の一致で処理を止めず、マッチしたすべての結果を返します。 i大文字と小文字を区別しない(ignore case)マッチングを有効にします。 m複数行(mul
-
Pythonの正規表現構文をわかりやすく解説!基本の仕組みと主な構文要素
正規表現とは? 正規表現(Regular Expression)とは、文字列の中から特定のパターンを検索・置換するために用いられる、特殊な記号と文字の組み合わせです。テキスト処理やログ解析、データクレンジングなど、さまざまな場面で活用されています。 Python正規表現を構成する2種類の文字 Pythonの正規表現構文は、主に以下の2種類の文字で構成されます。 1. メタ文字(Meta Characters) メタ文字とは、特別な意味を持つ記号のことです。ワイルドカードにおける「*」のように、通常の文字としてではなく、パターンを表現するための役割を果たします。代表的なメタ文字には以下のよう