正規表現の利用

本ソフトの検索語の指定には、正規表現が利用できます。

正規表現は、文字列の一部をパターン化して表現するための手法です。特定の単語ではなく、ある条件に一致する単語を表現することができます。DOSのワイルドカードをご存知の方は、その複雑なものと思えばよいでしょう。

本ソフトでは、JAVAの1.4以降に実装された正規表現のクラスを利用して、正規表現による検索を実現しています。

以下、検索に使用する正規表現用の記号と、正規表現用の実例を記載します。JAVAの正規表現に関するドキュメントも参考にして下さい。

△目次に戻る

正規表現用の記号

JAVAの正規表現用の記号の一覧のうち、検索に関係する記号を紹介します。

文字

特定の一文字を指定する正規表現の記述方法です。

記述サンプル 説明
 x 文字x (通常の文字列)
 \\ バックスラッシュ文字 (「\」自身はエスケープ・シーケンスの指定に使うので、「\」を2つ重ねて指定する)
 \t タブ文字 (\u0009)
 \n 改行文字 (\u000A)
 \r キャリッジリターン文字 (\u000D)
 \f 用紙送り文字 (\u000C)
 \a 警告 (ベル) 文字 (\u0007)
 \e エスケープ文字 (\u001B)
 \cx xに対応する制御文字
 \0n 8進値0nを持つ文字 (0 <= n <= 7)
 \0nn 8進値0nnを持つ文字 (0 <= n <= 7)
 \0mnn 8進値0mnnを持つ文字 (0 <= m <= 3、0 <= n <= 7)
 \xhh 16進値0xhhを持つ文字
 \uhhhh 16進値0xhhhhを持つ文字

文字クラス

複数の文字に合致する(もしくは合致しない)一文字を指定する正規表現の記述方法です。

記述サンプル 説明 日本語サンプル
 [abc] a、b、またはc (単純クラス)  [さしすせそ]
 [^abc] a、b、c以外の文字 (否定)  [^上昇登]
 [a-zA-Z] a〜z、またはA〜Z (範囲)  [さ-そは-ほ]
 [a-d[m-p]] a〜d、またはm〜p (結合。[a-dm-p]と同じ)
 [a-z&&[def]] d、e、f (交差。a〜zかつ、d、e、fのいずれかの文字)
 [a-z&&[^bc]] bとcを除くa〜z (減算。a〜zかつ、b、c以外の文字)
 [a-z&&[^m-p]] m〜pを除くa〜z (減算。a〜zかつ、m〜p以外の文字)

定義済みの文字クラス

条件が既に定義されている、特定の一文字を指定する正規表現の記述方法です。

記述サンプル 説明
 . ピリオド。任意の一文字。 (「\n」といった行末記号とマッチする場合もある)
 \d 0〜9の数字。 ([0-9]と同じ)
 \D 数字以外。 ([^0-9]と同じ)
 \s 空白文字。 (スペースや改行、タブ文字など、表示されない文字。[ \t\n\x0B\f\r]と同じ)
 \S 非空白文字。 ([^\s]と同じ)
 \w 単語構成文字。 ([a-zA-Z_0-9]と同じ)
 \W 非単語文字。 ([^\w]と同じ)

POSIX 文字クラス(US-ASCIIのみ)

英語に使用される一文字を指定する正規表現の記述方法です。

記述サンプル 説明
 \p{Lower} 小文字の英字。 ([a-z]と同じ)
 \p{Upper} 大文字の英字。 ([A-Z]と同じ)
 \p{ASCII} すべてのASCII文字。 ([\x00-\x7F]と同じ)
 \p{Alpha} 英字。 ([\p{Lower}\p{Upper}]と同じ)
 \p{Digit} 10進数字。 ([0-9]と同じ)
 \p{Alnum} 英数字。 (!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ のいずれか)
 \p{Punct} 句読文字。 ([\p{Alpha}\p{Digit}]と同じ)
 \p{Graph} 表示できる文字。 ([\p{Alnum}\p{Punct}]と同じ)
 \p{Blank} 空白またはタブ。 ([ \t]と同じ)
 \p{Cntrl} 制御文字。 ([\x00-\x1F\x7F]と同じ)
 \p{XDigit} 16進数字。 ([0-9a-fA-F]と同じ)
 \p{Space} 空白文字。 ([ \t\n\x0B\f\r]と同じ)

Unicodeブロックとカテゴリのクラス

Unicode文字の領域から一文字を指定する正規表現の記述方法です。

記述サンプル 説明
 \p{InGreek} ギリシャ語ブロックの文字。
 \p{Lu} 大文字 。
 \p{Sc} 通貨記号。
 \P{InGreek} ギリシャ語ブロック以外の文字。 (否定。[^\p{InGreek}]と同じ)
 [\p{L}&&[^\p{Lu}]] 大文字以外の文字。 (減算)

境界正規表現エンジン

語句や行を分割する境界を指定する正規表現の記述方法です。

記述サンプル 説明
 ^ 行の先頭。
 $ 行の末尾。
 \b 単語境界。
 \B 非単語境界。
 \A 入力の先頭。
 \G 前回のマッチの末尾。
 \Z 最後の行末記号がある場合は、それを除く入力の末尾
 \z 最後の行末記号がある場合は、それを除く入力の末尾

最長一致数量子

条件に見合う、最長の文字列を検索する正規表現の記述方法です。

記述サンプル 説明
 X? Xの文字を0回または1回。
 X* Xの文字を0回以上。
 X+ Xの文字を1回以上。
 X{n} Xの文字をn回。
 X{n,} Xの文字をn回以上。
 X{n,m} Xの文字をn回以上、m回以下。

最短一致数量子

条件に見合う、最短の文字列を検索する正規表現の記述方法です。

記述サンプル 説明
 X?? Xの文字を0回または1回。
 X*? Xの文字を0回以上。
 X+? Xの文字を1回以上。
 X{n}? Xの文字をn回。
 X{n,}? Xの文字をn回以上。
 X{n,m}? Xの文字をn回以上、m回以下。

強欲な数量子

条件に見合う、できるだけ長い文字列を検索する正規表現の記述方法です。

記述サンプル 説明
 X?+ Xの文字を0回または1回。
 X*+ Xの文字を0回以上。
 X++ Xの文字を1回以上。
 X{n}+ Xの文字をn回。
 X{n,}+ Xの文字をn回以上。
 X{n,m}+ Xの文字をn回以上、m回以下。

論理演算子

表記した文字の前後関係を指定する正規表現の記述方法です。

記述サンプル 説明
 XY Xの直後にY。 (通常の文字列です)
 X|Y XまたはY。

引用

正規表現を回避して検索をおこなう場合の記述方法です。

記述サンプル 説明
 \ 正規表現ではないが、次の文字をエスケープする。
 \Q 正規表現ではないが、\Eまでのすべての文字をエスケープする。
 \E 正規表現ではないが、\Qで開始された引用をエスケープする。

△目次に戻る

正規表現用の実例

実際にいくつかの実例を示し、正規表現の利用方法を紹介します。

例1:火山が爆発.+?。

正規表現で「.」(ピリオド:任意の一文字)、「+?」(プラス、クエスチョン:最短一致数量子で、1つ前の文字を1回以上)を指定。

「火山が爆発する。」「火山が爆発した。」「火山が爆発した時。」といった語句を検索します。

例2:<[Aa] [^>]*>

正規表現で「[Aa]」(Aもしくはa)、「[^>]」(>以外の文字)、「*」(最長一致数量子で、1つ前の文字を0回以上)を指定。

「<A HREF="main.html">」「<a href="main.html" taeget="_blank">」といった語句を検索します。

△目次に戻る