JAVA 正規表現学習アプリ

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

動作環境

Java1.8以降


ダウンロード

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


実行

実行は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


操作

左のタブは 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ファイルを用意

VMGファイルからEMLファイルを抽出する

vmgファイルからeml部分を抽出してファイルとして書き出すJavaプログラムの紹介です。

Java8以降がインストールされている環境で動作します。

vmg(vMessage)の正式な仕様は見つからなかったのですが、以下PDFを参考にしました。

http://creation.mb.softbank.jp/mc/tech/doc/A-007-111-Media_2.1.0(MC).pdf

プログラムの処理内容はvmgファイルを1バイトずつチェックして BEGIN:VBODY という行と END:VBODY という行の間をemlファイルとして保存するというもので、テキスト変換せずにバイナリで処理しているので文字コードの関係でEMLの内容が変更されることはありません。

vmg内emlのメール本文がBase64エンコードされずにそのままテキストで格納されている場合に、メール本文にもし END:VBODY という文字列のみの行があるとそこで本文終了と判断してしまいます。

ダウンロードは以下リンク先(Github Gist)の"Download ZIP"ボタンでzipファイルをダウンロードし、解凍するとソースと共にextractEML.jarが含まれています。

https://gist.github.com/kikujin/c89052c66615f14d678a768ee9066451

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

java -jar extractEML.jar

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

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

操作は対象のvmlファイルかvmlファイルを含むディレクトリと出力先のディレクトリを指定して抽出ボタンをクリックするだけです。

JarファイルをJavaに関連付ける

拡張子 .jar の関連付け

WindowsにおいてJDKをZip形式でダウンロードして展開した場合にはJarファイルの関連付けは行われません。以下の手順で.jarファイルをjavaw.exeに関連付けることで、ダブルクリック等による実行可能Jarファイルの起動が可能になります。

  1. 環境変数JAVA_HOMEを設定する。(Windowsのバージョンに合わせて検索、設定してください)

  2. 以下リンク先(Github Gist)の"Download ZIP"ボタンでzipファイルをダウンロードし、解凍する。
    https://gist.github.com/kikujin/d39f73a918caed9785fbcdc01382496b

  3. addkey-dotjar_BOM_UTF16_LITTLEENDIAN_CRLF.reg をダブルクリックしてレジストリにマージする。

環境変数JAVA_HOMEが正しく設定されているかどうかはコマンドプロンプトで以下のようにJavaのバージョンを表示させる事で確認できます。

C:>%JAVA_HOME%\bin\java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

Javaをアップデートした際には環境変数JAVA_HOMEを再設定してください。JAVA_HOMEを展開してパスに使っているのでレジストリの変更の必要はありません。また環境変数PATHも %JAVA_HOME%\bin と設定しておくとアップデートの際に変更せずに済みます。

.regファイルを実行する際には許可や警告のダイアログが表示されるので、それぞれ許可してマージしてください。

.regファイルはBOM付きのUTF-16トルエンディアンで記述されており、意味のある空行が挿入されています。内容を変更せずに使用してください。またテキストエディタなどで開いた際に別の形式で保存してしまわないように注意してください。大事なキーの値を書き換えてしまったり、削除してしまうと、OSが正しく動作しなくなる可能性があります。もし何か変更してしまったと思った場合には再度zipファイルから取り出して使用してください。

addkey-dotjar_BOM_UTF16_LITTLEENDIAN_CRLF.reg の内容の画像です。commandの @=hex(2): 以降の部分はUTF-16(LE)のバイト列のカンマ区切り16進表記です。例えば最初の 22,00 の22は10進法で34で " のことで全体では以下の文字列を表しています。

"%JAVA_HOME%\bin\javaw.exe" -jar "%1" %*

マージ後のレジストリには以下の画像のように .jar と jarfile というキーが追加されます。


設定した関連付けを削除する

addkey-dotjar_BOM_UTF16_LITTLEENDIAN_CRLF.regでレジストリに加えたキーはdelete-jar_BOM_UTF16_LITTLEENDIAN_CRLF.regをダブルクリックで実行することで削除できます。このファイルも絶対に編集しないでください。

青空文庫を秀丸エディタで読む際の設定とマクロ

秀丸エディタの縦書き表示設定と青空文庫のテキストからルビと注記を削除する秀丸マクロの紹介です。(秀丸エディタVer.8.83使用)

青空文庫はブラウザやソフトで本と同じようにルビや注記が展開された形で読む事が可能です。青空文庫のサイトで読み方として紹介されているので、ご存じ無い方は参照してみてください。

秀丸で作業していて、ふっと息抜きをしたくなった時にマーク一覧から開いて読み、また栞がわりにマークして元の作業に戻る、そんな使い方をしたくてこのマクロを作ってみました。


青空文庫用マクロの概要

マクロ実行後のイメージです。(2つあるタブのそれぞれを選択した際の画像を並べたものです)

test.vtxt は青空文庫のルビと注記を含むテキストで、単に拡張子を txt から vtxt に変更したものです。aozora.hilight という強調表示定義ファイルを適用しているので、ルビが強調表示1に設定した色、注記が強調表示2に設定した色で表示されています。また色を背景色に近いものに設定しているので分かりづらいですが、左矢印で改行文字が表示されています。

test[-].vtxt は aozora.mac というマクロを test.vtxt 上で実行して生成したテキストファイルです。 aozora.mac はすでに test[-].vtxt が秀丸で開かれていればそれを、そうでなければ同じフォルダ内の test[-].vtxt を開き test.vtxt とスクロール同期させます。test[-].vtxt ファイルが同じフォルダに無ければ test.vtxt からルビと注記を削除し、削除した文字数分の空白を改行の前に挿入した内容で生成し、 test.vtxt とスクロール同期させます。

test[-].vtxt 上でマクロを実行した場合は test.vtxt とスクロール同期させます。もし同じフォルダに test.vtxt が無ければ、その旨のエラーメッセージを表示してマクロが終了します。

読書の際には test[-].vtxt を開き、マクロを実行して test.vtxt とスクロール同期させて、改行前に空白の入っている文があればルビ又は注釈が削除されているので、もし確認したい場合にはtest.vtxt の方で確認するという形になります。


マクロファイルのダウンロード

秀丸のサイトのマクロライブラリに登録しているので以下より aozora_mac.zip をダウンロードしてください。

https://hide.maruo.co.jp/lib/macro/aozora_mac.html

zipを解凍すると、以下のファイルを含む aozora_mac フォルダが生成されます。

  • aozora.hilight
  • aozora.mac
  • test.vtxt
  • 使用法.txt

ソースはGitHub Gistにも置いています。

https://gist.github.com/kikujin/1df7ec2e1e1197df48fd7a8837417fa6


縦書き設定

最初に拡張子 vtxt を秀丸に関連付けます。 設定方法はこちらを参照してください。

秀丸エディタへの拡張子の関連付け - 藤納戸(#706CAA)のブログ

関連付けが終了したら test.vtxt を秀丸で開いて縦書き設定を行います。

[メニュー]→[その他]→[ファイルタイプ別の設定]

表示されるダイアログの[.VTXTの設定]の右のドロップダウンリストで[共通]が選択されています。このドロップダウンリストに表示されるのが、設定の一覧です。拡張子ごとに任意の設定を選択できます。

拡張子 .vtxt に対応する適切な設定はまだ設定リストの一覧に無いので、"縦書きファイル"という名前の設定を新規に作成します。

まず[設定のリスト]をクリックし、表示される[設定のリスト]ダイアログで[新規]をクリックします。[新規設定]のダイアログが表示されるので、"縦書きファイル"と入力して[OK]をクリックし、[設定のリスト]ダイアログも閉じます。

次に[共通]となっていたドロップダウンリストで[縦書きファイル]を選択します。以降は[縦書きファイル]に対する設定となります。

[設定の対象]で[フォント]を選択し、縦書き表示する際のフォントとフォントサイズを好みに合わせて設定します。(このページで紹介している青空文庫マクロを適用する場合には、ルビ《》と注記[#]を取り除く際にその行末に取り除いた分の半角スペースを挿入しているので、等幅フォントを使用する必要があります)

[設定の対象]で[体裁]を選択し、折り返し文字数を設定します。これは秀丸のウインドウサイズやフォントサイズに合わせて設定します。

[設定の対象]で[体裁]の[詳細]を選択し、[縦書き]にチェックを入れ、[行間]はいろいろ試してみて読みやすい値に設定します。

[設定の対象]で[デザイン]の[表示]を選択し、[改行文字を記号で表示]にチェックを入れます。(このページで紹介している青空文庫マクロを適用しない場合には必要ありません)

[設定の対象]で[デザイン]を選択し、[改行文字]にチェックを入れ、あまり目立たないように色を背景色に近いものに設定します。(一つ前の設定で[改行文字を記号で表示]にチェックを入れた場合にこの設定を行います)

[設定の対象]で[デザイン]を選択し、[場所の一覧]をスクロールすると下の方に[強調表示1]及び[強調表示2]があるので好みの色に設定します。(このページで紹介している強調表示定義ファイルを適用しない場合には必要ありません)


マクロと強調表示定義ファイルの適用

最後にマクロファイル及び強調表示定義ファイルの設定を行います。やり方は以下を参照してください。(.vtxt ファイルに適用する"縦書きファイル"という設定の作成部分がこのページのものと重複しているのでスキップしてください)

秀丸マクロと強調表示定義ファイルの設定 - 藤納戸(#706CAA)のブログ

秀丸マクロと強調表示定義ファイルの設定

秀丸エディタの強調表示定義ファイルの適用方法とマクロファイルの登録・実行方法の紹介です。

マクロファイルと強調表示定義ファイルの置き場所

[メニュー]→[その他]→[動作環境]

表示されるダイアログの[設定の対象]で[環境]をクリックすると、マクロファイル及び設定ファイル(強調表示定義ファイル他)を配置するフォルダを確認、変更できます。

f:id:fujinand:20181105210846p:plain

[設定ファイル用のフォルダ]はキー割り当てや強調表示、色の設定などでデフォルトの保存・読み込み先となるフォルダです。特に変更していなければ以下のようになっているかもしれません。

マクロファイル用のフォルダ:
C:\Users\ユーザー名\AppData\Roaming\Hidemaruo\Hidemaru\Macro

設定ファイル用のフォルダ:
C:\Users\ユーザー名\AppData\Roaming\Hidemaruo\Hidemaru\Setting

秀丸のヘルプには以下のように記述されています。

空欄(何も指定されてない)の場合はHIDEMARU.EXEと同じフォルダが設定ファイル用のフォルダと解釈されます。
(例:標準のインストール先の C:\Program Files\Hidemaru)
Windows Vista以降では、C:\Program Files配下には原則的に非管理者は書き込みできないので、空欄にすることは推奨されません。

フォルダ名はドライブ名も含めてフルパスを指定してください。パス名の最後に「\」マークはつけないでください。

Vista以降で新規インストールした直後は、

C:\Users(ユーザー名)\AppData\Roaming\Hidemaruo\Hidemaru\Setting
が自動的に設定されます。
このフォルダは非表示のフォルダで、エクスプローラからフォルダツリーをたどっては行けません。
エクスプローラのアドレスバーに貼り付けてEnterすると見ることができます。
深いところにあることもあり、設定ファイル用のフォルダは書き込みできる任意の場所を設定されることをお勧めします。
例えばマイドキュメント配下や、 C:\HidemaruData というフォルダを作ってそこを指定しておくといいです。

画像では C:\HidemaruData\macro とconfフォルダを作成・設定していますが、マクロファイル用フォルダや設定ファイル用フォルダを変更する際に元のフォルダの中にファイルがある場合には、それらを新しい方にコピー又は移動しておきます。


強調表示定義ファイルの設定

強調表示定義ファイルは秀丸の強調表示や色などの設定が規定のフォーマットに従って記述されているテキストファイルで、強調表示定義ファイルの内容を読み込んで秀丸の設定に適用したり、設定を強調表示定義ファイルに書き出したりできます。

ここでは例として拡張子が vtxt という縦書き用テキストファイルに aozora.hilight という強調表示定義ファイルを適用してみます。

まず aozora.hilight を設定ファイル用のフォルダに配置します。次に適用する .vtxt ファイルを秀丸で開き

[メニュー]→[その他]→[ファイルタイプ別の設定]

表示されるダイアログの[設定の対象]で[デザイン]の[強調表示]を選択します。

f:id:fujinand:20181105211002p:plain

画像では[.VTXTの設定]の右のドロップダウンリストで[共通]が選択されています。このドロップダウンリストに表示されるのが、設定の一覧です。拡張子ごとに任意の設定を選択できます。

拡張子 vtxt に対応する適切な設定はまだ設定リストの一覧に無いので、"縦書きファイル"という名前の設定を新規に作成します。

まず[設定のリスト]をクリックし、表示される[設定のリスト]ダイアログで[新規]をクリックします。[新規設定]のダイアログが表示されるので、"縦書きファイル"と入力して[OK]をクリックし、[設定のリスト]ダイアログも閉じます。

f:id:fujinand:20181105211121p:plain

次に[共通]となっていたドロップダウンリストで[縦書きファイル]を選択し、[強調表示]を[ユーザー定義]にしてから[読み込み]をクリックします。

f:id:fujinand:20181105211137p:plain

ダイアログが表示され、設定ファイル用フォルダ内の強調表示定義ファイルがリスト表示されるので、目的のものを選択して[OK]をクリックします。

f:id:fujinand:20181105211151p:plain

最後に[ファイルタイプ別の設定]ダイアログの[OK]をクリックして設定完了です。

f:id:fujinand:20181105211207p:plain

設定と拡張子は1対1ではなく1対多なので、例えば aozr という拡張子のファイルも縦書きファイル設定にしたい場合には、 .aozr ファイルを秀丸で開き、前述と同様に[ファイルタイプ別の設定]で.AOZRの設定にドロップダウンリストから"縦書きファイル"を選択し、[OK]で完了です。


マクロファイルの設定と実行

例として aozora.mac というマクロファイルを設定・実行してみます。

aozora.mac をマクロファイル用のフォルダに配置後、マクロを適用するテキストを秀丸で開きます。

[メニュー]→[マクロ]→[マクロ実行]

ダイアログが表示され、マクロファイル設定フォルダ内のマクロの一覧が表示されるので、実行したいマクロを選択し、[OK]をクリックすることで即座にマクロが開始されます。 マクロファイル設定フォルダ以外の場所にマクロファイルがある場合には[参照]ボタンで表示されるダイアログで実行するマクロファイルを指定します。

f:id:fujinand:20181105211227p:plain

マクロの登録

マクロは登録しておくと便利です。

[メニュー]→[マクロ]→[マクロ登録]

f:id:fujinand:20181105211251p:plain

空欄のどれかをクリックし[タイトル]に任意のマクロ名を入力し、[ファイル名]の横のコンボボックスでマクロファイルを選択し、[OK]で登録完了です。 11以降の番号にマクロを登録する場合はグループ名も設定しておきます。

実行は

[メニュー]→[マクロ]→[マクロ名]

をクリックするか、10以下の番号に登録している場合はショーカットキーの Ctrl+番号 が使えます。

f:id:fujinand:20181105211308p:plain

秀丸エディタへの拡張子の関連付け

拡張子を秀丸エディタに関連付ける方法の紹介です。拡張子の関連付けはファイルを右クリックして[(プログラムから)開く]などから設定可能ですが、ここでは秀丸と一緒にインストールされるHmSetup.exeを使い、例として vtxt という拡張子の関連付けとアイコンの設定を行います。

[メニュー]→[その他]→[動作環境]

表示されるダイアログの[設定の対象]で[関連付け]を選択し、[拡張子の関連付け]ボタンをクリック。(ユーザーアカウント制御のダイアログが表示されたら許可します)

f:id:fujinand:20181110161455p:plain

秀丸エディタのセットアップ]ダイアログが表示されるので、[追加]ボタンをクリック。

f:id:fujinand:20181110161511p:plain

vtxt と入力し、[OK]ボタンをクリック。

f:id:fujinand:20181110161524p:plain

アイコンの設定も行うので vtxt が選択されている状態で[プロパティ]をクリック。

f:id:fujinand:20181110161535p:plain

HmSetup.exeに用意されているアイコンの一覧から好みのものを選択し[OK]をクリック。[「ファイルの種類」に・・・]で設定しているのは名前を付けてファイルを保存する際のダイアログで拡張子を選択するドロップダウンリストに表示される文字列です。

f:id:fujinand:20181110161551p:plain

秀丸エディタのセットアップ]ダイアログで[完了]。

f:id:fujinand:20181110163043p:plain

完了のメッセージが表示されるので[OK]ボタンで終了です。

f:id:fujinand:20181110163054p:plain