正規表現学習アプリ

正規表現の学習・入門用アプリケーションの紹介です。メタ文字などの説明・使用例などの表示や正規表現パターンの視覚的なテストなどが行えます。 学習用途以外にも、Javaプログラマ正規表現を作成・確認したり、java.util.regexパッケージを使うコードを記述する際にはお役に立てると思います。

動作環境

Java1.8以降


ダウンロード

以下リンク先(Github Gist)の"Download ZIP"ボタンでzipファイルをダウンロードし、解凍するとregex-tutorial-0.92.jarが含まれています。 フリーソフトとしてMITライセンスのもとで公開しており、ソースコードはjarに内包しています。
https://gist.github.com/kikujin/639ff210f8c5e02bc50a3b8ee9c37580


実行

実行はWindowsでjarファイルがJavaに関連付けされていれば、regex-tutorial-0.92.jarをダブルクリックなどで実行できますが、そうでなければコマンドプロンプトやターミナルなどから以下のコマンドで起動してください。

java -jar regex-tutorial-0.92.jar

もしWindowsで実行可能jarファイルをダブルクリックしても起動できない場合は以下をご参照ください。

https://fujinand.hatenablog.com/entry/2019/02/23/230336


操作

f:id:fujinand:20190331131940p:plain

左のタブは Pattern クラス、 Matcher クラスのメソッドやメタ文字、その他正規表現に関する説明を表示する為のコンポーネントが格納されています。 それらの説明は中央一番下のテキストエリアに表示されます。 説明内容は Java 1.5 の正規表現実装に依存しています。

マッチングを行う場合は 中央上の "正規表現:" というラベルの右のテキストフィールドに正規表現パターンを入力し、その下のテキストエリアにマッチングの対象の文字列を入力して(あるいは [Ctrl]+V によってコピーした文字列を貼り付けて) find ボタンを押します。 マッチした部分があれば上のイメージのように明るい背景色を使って強調表示します。 マッチしたのが位置の場合にはその位置の上部に小さな三角形を表示します。 半角スペース、全角スペース、タブ、改行(LF または CRLF)は図形で表示します。 CR を改行文字とする文章には対応していません。 Java コードの文字リテラルではバックスラッシュ \ (日本語フォントでは円記号にマッピング)はエスケープシーケンスを使ってバックスラッシュ2つの \\ と記述しなければなりませんが、 "正規表現:" ラベルの右のテキストフィールドではエスケープシーケンスを使う必要はありません。

正規表現を使った事がないという方はこのページのこれ以降の部分はほとんど興味の無い内容だと思われます。アプリケーションを起動したら、左側のタブから "その他" を選んで一読し、次に "メタ文字" を開いて、それぞれのメタ文字の意味を理解し、実際にそのメタ文字を含む正規表現パターンを作成してマッチングを行ってみる事をお勧めします。

マッチングの結果は右側上部の "状態" にも表示します。 入力文字数はマッチングの対象文字列の文字数で、 groupcount はキャプチャグループの数、 requiredEnd hitEnd は Matcher クラスの同名メソッドの返す値を表示します。 "group" ラベルの右のコンボボックスはキャプチャグループの番号を選択します。 0 は常にマッチした文字列全体を指し、 1 以上の値は正規表現にキャプチャグループが使われている場合にのみ選択可能で、選択したキャプチャグループにマッチした部分を強調表示します。 start や end は強調表示している部分の開始と終了位置を示し、これらは Matcher クラスの同名メソッドの返す値です。

マッチングの際のモードの設定は右側中央の "モード" で行います。 チェックボックスにチェックの入っているモードが有効になります。

右側下の "領域と境界" はマッチングの対象となる文字列への領域の設定や領域境界の設定を行います。 テキストフィールドに設定する領域の開始位置と終了位置を入力して region ボタンを押すと領域を設定し、設定した値を "regionstart:" "regionend:" ラベルの右に表示します。 anchoringBounds や transparentBounds はマッチングの際の領域境界における正規表現エンジンの動作を設定します。 領域の設定はバージョン 1.5 から導入されたもので、この領域や領域境界の設定に関しても左タブの "その他" を開くと説明へのリンクがあります。

中央上部の lookingAt matches find find(int) などのマッチングを行うボタンは Matcher クラスの同名のメソッドを実行します。 一度マッチングを行った後に正規表現パターンやマッチングの対象となる文字列を編集する場合には reset または クリアボタンを押す必要があります。 Matcher クラスのメソッドに関しては左タブで Matcher を開きメソッド名をクリックするとその説明が表示されます。

中央中程の "置換構文:" ラベルの右のテキストフィールドには下の appendReplacement replaceFirst replaceAll ボタンで置換を行う際の置換文字列を入力します。 appendReplacement replaceFirst replaceAll appendTail などのボタンは入力されている正規表現パターンやマッチング対象の文字列、置換文字列を使って Matcher クラスの同名のメソッドを実行し、その結果を中央のテキストエリアに表示します。置換文字列では $ がキャプチャグループを参照する特別な意味を持ちます。 置換文字列を入力するテキストフィールドには常にダブルクォート "" が表示されていますが、このダブルクォートは置換文字列には含まれず、入力内容が Java プログラムにおける文字リテラルと同じように記述されなければならない事を明確にする為に表示しています。 つまり、バックスラッシュ \ は2つ続けて \\ と入力しなければなりません。

中央一番下の "前へ" "次へ" ボタンは1つの説明から別の説明にリンクで移動した場合などに元に戻ったり、先に進んだりする為にあり、 "チュートリアルモードクリア" ボタンはチュートリアルモードを解除します。 チュートリアルモードとは説明の際に具体例を実行するモードで上のアプリケーションの画像は後方参照を行うマッチングの例を実行している画面です。 チュートリアルモードではフレームのボタンを除いて "前へ" "次へ" "チュートリアルモードクリア" ボタンと説明部分のリンクをクリックする以外のマウス操作は無視されます。 そのためチュートリアルモードを解除するには "前へ" "次へ" "チュートリアルモードクリア" ボタンのどれかをクリックする必要があります。


更新履歴

日付 Ver. 変更内容
2019.03.31 0.91 以前[Java 正規表現テストアプリケーション]として公開していたものをホームページサービスの終了にあたって、こちらに移動。
2019.04.13 0.92 UIの一部の色やフォントを設定するXMLファイルを用意