-
Java正規表現のPOSIX文字クラス\p{Lu}とは?大文字の検出・抽出方法を解説
POSIX文字クラス \p{Lu} は、Unicodeの「大文字(Upper case Letter)」カテゴリに属する1文字にマッチする正規表現です。Javaでは Pattern クラスと組み合わせることで、文字列の中から大文字を検索・抽出・カウントできます。 例1:文字列に含まれる大文字の数をカウントする import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example1 { public static void main(St
-
Java正規表現の\p{IsAlphabetic}で英字を判定・カウントする方法
Javaの正規表現には、特定の種類の文字に一致させるためのPOSIX文字クラスが用意されています。その中でも \p{IsAlphabetic} は、Unicodeの定義上「字母(アルファベット)」とみなされる文字に一致するパターンです。これを活用すると、文字列に含まれる英字のカウントや、英字を含む文字列の抽出などをシンプルなコードで実現できます。例1:文字列に含まれる英字の数をカウントする最初の例では、ユーザーが入力した文字列に対して \p{IsAlphabetic} を適用し、英字が何文字含まれているかを数えて表示します。import java.util.Scanner; import ja
-
Java正規表現のPOSIX文字クラス「\p{Sc}」で通貨記号をマッチングする方法
POSIX文字クラスの一つである \p{Sc} は、通貨記号にマッチします。ドル記号($)、ユーロ記号(€)、ポンド記号(£)、円記号(¥)など、Unicodeで定義されている各種通貨記号を検出したい場合に便利です。この記事では、Javaの正規表現で \p{Sc} を使って、文字列中の通貨記号をカウントする方法と、通貨記号を含む文字列を抽出する方法を、実行可能なサンプルコード付きで解説します。例1:文字列中の通貨記号をカウントする以下の例では、ユーザーが入力した文字列に含まれる通貨記号の数を数えています。Pattern.compile() で正規表現をコンパイルし、Matcher.find()
-
JavaのMatchResultインターフェースのend()メソッドとは?使い方を実例で解説
MatchResultインターフェースとは java.util.regex.MatchResult インターフェースは、正規表現によるマッチ処理の結果を取得するための各種メソッドを提供します。 このインターフェースのオブジェクトは、Matcher クラスの toMatchResult() メソッドを使って取得できます。このメソッドは、現在のマッチャーが保持しているマッチ状態を表す MatchResult オブジェクトを返します。 end()メソッドの役割 MatchResult インターフェースが持つ end() メソッドは、直前に行われたマッチの終了位置(最後にマッチした文字の次のオフセッ
-
JavaのMatchResult.end(int group)メソッドの使い方を例で解説
java.util.regex.MatchResult インターフェースは、正規表現によるマッチ処理の結果を取得するためのメソッド群を提供します。 このインターフェースのオブジェクトは、Matcher クラスの toMatchResult() メソッドを呼び出すことで取得できます。このメソッドは、現在のマッチャーが保持しているマッチ状態を表す MatchResult オブジェクトを返します。 end(int group) メソッドとは end(int group) メソッドは、キャプチャリンググループの番号を整数で受け取り、そのグループ内で最後にマッチした文字の直後の位置(オフセット)を i
-
JavaのMatchResultインターフェースgroup()メソッドとは?使い方を実行例付きで解説
java.util.regex.MatchResultインターフェースは、正規表現によるマッチの結果を取得するためのメソッド群を提供します。 このインターフェースのオブジェクトは、MatcherクラスのtoMatchResult()メソッドを使って取得できます。このメソッドは、現在のマッチャーのマッチ状態を表すMatchResultオブジェクトを返します。 このインターフェースが持つgroup()メソッドは、直前のマッチにおいて入力シーケンスから実際にマッチした部分文字列を表す文字列値を返します。 group()メソッドの基本構文 String group() 引数なしで呼び出した場合、gro
-
【Java入門】正規表現の文字クラスで交差(&&)を使って共通文字にマッチさせる方法
Javaの正規表現において、文字クラスは角括弧「[ ]」を使用して定義します。この部分式は、指定された文字の集合の中から任意の1文字にマッチします。たとえば、正規表現「[abc]」は、a、b、cのいずれか1文字にマッチします。文字クラスにはさまざまなバリエーションがありますが、そのひとつが「交差(intersection)」です。交差を使うと、複数の範囲や集合に共通して含まれる文字だけにマッチさせることができます。交差関係は「&&」演算子で定義します。たとえば、正規表現「[a-z&&[r-u]]」は、a〜zの範囲とr〜uの範囲の両方に含まれる文字、つまりrからu
-
Java正規表現の文字クラスで範囲を減算(差集合)する方法
Javaの正規表現では、ある文字の範囲から別の範囲を引き算して、新しい範囲として扱うことができます。これを実現するには、文字クラスの2つの機能、すなわち否定(negation)と共通部分(intersection)を組み合わせて使用します。例えば、範囲 [a-l] と [^e-h] の共通部分を取ると、「a〜l のうち e〜h を除いた文字」、つまり a・b・c・d・i・j・k・l が得られます。これが文字クラスにおける「減算」の仕組みです。構文のポイント減算を行う場合は、文字クラス内で && 演算子を使って2つの条件を結合します。[a-l&&[^e-h]][a-l] … アル
-
Javaの正規表現における\Qメタ文字の使い方|メタ文字をエスケープしてリテラルとして扱う方法
Javaの正規表現では、\Q から \E までの間に挟まれたすべての文字が「引用符で囲まれた」状態になり、メタ文字としての特別な意味が無効化されます。つまり、正規表現内のメタ文字を \Q と \E で囲むことで、それらを通常の文字(リテラル)として扱えるようになります。 例えば、[aeiou] という正規表現は文字クラスとして解釈され、「母音(a・e・i・o・u)を含む文字列」にマッチします。しかし、これを \Q[aeiou]\E のように記述すると、文字クラスとしての意味は失われ、入力文字列中に「[aeiou]」という文字列そのものが含まれている場合にのみマッチするようになります。 通常の正
-
文字列から1と2以外のすべての数字を削除するJavaプログラム
正規表現「(?<!\\d)数字(?!\\d)」は、指定された特定の数字に一致します。このパターンでは、後読みアサーション((?<!\\d))と先読みアサーション((?!\\d))を組み合わせており、対象の数字の直前・直後に別の数字が存在しない場合、つまり「単独の数字」であるときにのみマッチします。replaceAll()メソッドは、第1引数に正規表現パターン、第2引数に置換後の文字列を受け取るメソッドです。パターンに一致したすべての箇所が、指定された文字列に置き換えられます。したがって、文字列から1と2を除くすべての数字を削除するには、以下の手順で処理を行います。まず、正規表現を使
-
Java正規表現の所有格数量詞(Possessive Quantifier)とは?貪欲数量詞との違いを解説
Javaの正規表現には、貪欲数量詞(Greedy Quantifier)、控えめ数量詞(Reluctant Quantifier)、そして所有格数量詞(Possessive Quantifier)の3種類があります。この記事では、その中でも特に「所有格数量詞」について詳しく解説します。 貪欲数量詞と所有格数量詞の違い 貪欲数量詞はデフォルトで使用される数量詞です。入力文字列から可能な限り長くマッチしようとし(最長一致)、マッチに失敗した場合は末尾の文字を1つ外して再度マッチを試みます。この動作をバックトラック(巻き戻し)と呼びます。 一方、所有格数量詞も貪欲数量詞と同様に、最初にできるだけ多く
-
【Java】正規表現のPOSIX文字クラス \p{Blank} で空白文字(スペース・タブ)を扱う方法
Javaの正規表現で使えるPOSIX文字クラス \p{Blank} は、半角スペースやタブといった「空白(ブランク)」に該当する文字すべてにマッチします。このクラスを活用すると、文字列中の空白文字の検出・カウントや、空白を含む行の抽出などをシンプルなコードで実現できます。 \p{Blank}の特徴 \p{Blank}がマッチするのは、主に以下の2種類の文字です。 半角スペース(U+0020) タブ(\t) なお、改行やフォームフィードなども含む、より広い範囲の空白文字にマッチさせたい場合は \s を使用します。\p{Blank}はあくまで「スペースとタブ」に限定してマッチングを行う点に注
-
Java正規表現の論理演算子とは?XY・X|Y・キャプチャグループの使い方を解説
Javaの正規表現では、複数の条件を組み合わせるための論理演算子が3種類用意されています。それぞれの書き方と動作を、実際に実行できるサンプルコードとともに見ていきましょう。XY:Xの直後にYが続く場合に一致(連結)X|Y:XまたはYのいずれかに一致(選択)(X):キャプチャグループ。複数の文字を1つの単位として扱うXY:Xの後にYが続くパターンこれは最も基本的な形式で、2つの文字が連続して出現する箇所に一致します。例えば「am」という正規表現は、入力文字列の中に「a」の直後に「m」が続く部分があるかどうかを判定します。サンプルコードimport java.util.Scanner; impor
-
Java正規表現の数量詞(Quantifier)とは?種類と使い方をサンプル付きで解説
正規表現を構築する際、特定の文字や文字クラスの出現回数を指定したい場面は多くあります。そのような場合に活用できるのが数量詞(Quantifier)です。数量詞を使うことで、「0回以上の繰り返し」や「ちょうどn回」など、繰り返しパターンを簡潔かつ柔軟に記述できます。 下記の表は、Javaの正規表現(java.util.regex)がサポートする主な数量詞をまとめたものです。 数量詞説明使用例 re*0回以上の出現にマッチ[0-9]*:0個以上の数字にマッチ re?1回、またはまったく出現しない場合にマッチ[0-9]?:0個または1個の数字にマッチ re+1回以上の出現にマッチ[0-9]+:1
-
【Java】正規表現で括弧()を含む文字列に一致させる方法とサンプルコード
Javaで文字列の中に括弧「(」や「)」が含まれているかどうかを判定したい場合、正規表現を使うと簡単に実装できます。この記事では、括弧に一致する正規表現の書き方と、実際に動作するサンプルコードを2つのパターンで紹介します。括弧に一致する正規表現以下の正規表現は、括弧を含む文字列を受け入れます。^.*[\\(\\)].*$;このパターンの各要素は次のような意味を持っています。^ … 文字列(行)の先頭に一致します。.* … 0個以上の任意の文字に一致します。[\\(\\)] … 括弧「(」または「)」に一致します。正規表現では括弧は特殊文字のため、バックスラッシュでエスケープする必要があります。
-
Java正規表現の最短一致(レラクタント)数量詞の使い方を解説
正規表現には「貪欲な(greedy)数量詞」と「最短一致(reluctant/non-greedy)数量詞」という2種類のマッチング方法があります。 貪欲な数量詞はデフォルトの動作で、入力文字列からできるだけ多くの文字に一致しようとします(最長一致)。もし一致に失敗した場合は、末尾の1文字を手放して再度マッチングを試みます。 一方、最短一致(レラクタント)数量詞は、できるだけ少ない文字数で一致させようとします。まず入力文字列の先頭1文字だけでマッチングを試み、一致しなければ次の1文字を追加して再試行するという動作になります。 貪欲な数量詞の直後に「?」を付けると、その数量詞は最短一致(レラク
-
Java正規表現の文字クラス完全ガイド|否定・範囲・集合演算の使い方を実例で解説
Javaの正規表現における文字クラスは、角括弧「[ ]」で定義される部分式です。指定された文字セットの中から1文字にマッチさせるために使われます。 例えば、正規表現「[abc]」は「a」「b」「c」のいずれか1文字にマッチし、「[a-z]」はaからzまでのアルファベット1文字にマッチします。 文字クラスの主なバリエーション Javaの正規表現では、文字クラスを組み合わせることで柔軟なパターンマッチングが可能です。以下に代表的な5つのバリエーションを紹介します。 1. 否定(Negation) キャレット「^」を角括弧内の先頭に置くと、指定した文字以外の1文字にマッチします。 例:「[^abc]
-
【Java】正規表現でキャプチャグループの数をカウントする方法(groupCountメソッド)
キャプチャグループとは Javaの正規表現では、複数の文字を括弧 () で囲むことで「キャプチャグループ」として扱うことができます。これにより、複数の文字をひとつの単位として抽出・操作できるようになります。 マッチ結果に含まれるキャプチャグループの数を調べるには、MatcherクラスのgroupCount()メソッドを使用します。このメソッドは、現在のマッチにおけるキャプチャグループの総数を計算し、その値を返します。 ポイント: group(0) はパターン全体のマッチ結果を表すため、groupCount() の戻り値には含まれません。括弧で囲まれた部分だけがカウント対象となります。 サンプ
-
Java正規表現の独占量指定子「X?+」メタ文字の使い方
Javaの正規表現における独占量指定子(Possessive Quantifier)X?+は、直前の要素Xが「1回だけ出現する」か「まったく出現しない」場合にマッチします。通常の量指定子「?」と似た働きをしますが、最大の特徴はバックトラック(巻き戻し)を行わないという点です。そのため、マッチング処理が高速になり、意図しないマッチの再試行を防ぐことができます。 動作のポイント この例ではパターン「T?+」を使用しています。入力文字列内の各位置で、「T」があればそれにマッチし、なければ空文字列にマッチします。その結果、入力文字列のすべてのインデックス位置でマッチが検出されます。 サンプルコード p
-
Java正規表現で印刷不可能な文字(制御文字)をマッチングする方法
Javaの正規表現では、タブや改行といった印刷不可能な文字(非表示文字・制御文字)も簡単に照合できます。一般的によく使われる印刷不可能な文字は7種類あり、それぞれ固有のエスケープシーケンスと16進数表現を持っています。主な印刷不可能な文字の一覧名前文字16進数表現ベル(警告音)\a0x07エスケープ\e0x1Bフォームフィード\f0x0Cラインフィード(改行)\n0x0Aキャリッジリターン(復帰)\r0x0D水平タブ\t0x09垂直タブ\v0x0B例1:エスケープシーケンスでタブをカウントする次のJavaプログラムは、ユーザーから入力されたテキストを受け取り、その中に含まれるタブ(水平タブ)の