本アプリは Microsoftの.NET Framework の正規表現に準拠した、正規表現パターンの読み解きと正規表現パターンの作成アプリケーションです。
本アプリはフリーソフトです、他に詳しい取扱説明書はありません。(Edition090)
正規表現を活用したアプリケーションソフト 汎用ダウンローダー「風呂桶」 Bathtub を公開しています。
Bathtubは、任意の正規表現パターンを指定しURLを抽出してダウンロードするダウンロードアプリです。
次のような特徴があります
・パターン作成補助機能で簡単に正規化パターンが得られる
・URLに応じて保存フォルダを変更して自動仕分け保存
・連番URL、ファイルリスト(Fileモード)を使った無人ダウンロード
・URL取得の条件設定で無駄のないダウンロード
スクリーンショットをご覧ください。
少々マニアックなダウンローダーですが、使いこなせば縦横無尽にダウンロードできることでしょう。
メイン画面では、おもに正規化パターンの読み解きとパターンマッチを行います。
それに関連してソーステキストの取得・選択、正規化パターンの選択などを行います。
図の操作部分をクリックするとその説明にジャンプします。(番号をクリックしてもジャンプしません)
基本的な使い方は、
③に正規表現パターンを記入して、
読み解きの場合は⑩をクリックします。
パターンマッチングの場合は⑧をクリックします。
それぞれの結果が②に表示されます。
このほか、①へのソーステキストの読み込み、指定サイト(④にURL)のhtmlの読み込み、パターン保存と読み込み、フォント変更などの機能が用意されています。
関連ボタンをクリックしてその機能をご覧ください。
ソーステキストPath欄で指定されたテキストファイルの内容が表示されます。
ソーステキストPath欄がURLの場合、そのHTMLがダウンロードされ表示されます。
ファイルPathの場合には、先に保存した(HTML)テキストファイルの内容が表示されます。
ここのテキストを対象にパターンマッチを行い、正規化パターンの確認ができます。
ここには正規化パターンを読み解いた結果、又はパターンマッチの結果が表示されます。
右端の▼でプルダウンメニューが開き、登録されている正規化パターンが選択できます。
この欄に正規化パターンを入力することもできます。⑪のパターン作成で作成したパターンはここで受け取ります。
プルダウンメニューに正規化パターンを登録することができますが、入力しただけでは登録されません。19.参照
本アプリは、外部アプリから呼び出されるときに第1引数でURLを、第2引数でパターンを受け取ることができます。
第1引数が渡されればHTMLをダウンロードし、さらに第2引数が渡されればパターンマッチまで実行します。
ソーステキストPath欄の内容はURLかファイルPathで、①のソーステキストを指し示すものです。
5.のソーステキスト選択でURLとファイルの切り替え指定ができます。
本アプリは、外部アプリから呼び出されるときに第1引数でURLを、第2引数でパターンを受け取ることができます。
第1引数が渡されればHTMLをダウンロードし、さらに第2引数が渡されればパターンマッチまで実行します。
クリックするとプルダウンメニューが開きます。選択肢は4つ
(1)HTMLファイルを読み込む:ファイルダイアログが開き、保存してあるHTMLを読み込みます。
(2)WebからHTMLを読み込む :④Path欄のURLからそのHTMLをダウンロードします。予めURLを指定しておきます。
(3)HTMLに名前を付けて保存:現在①テキスト欄に表示されている(HTML)テキストを保存します。
(4)FilePath/URLをクリアする:ソーステキストPath欄をクリアします。
このボタンで④ソーステキストPath欄のURLからHTMLの再読み込みを行います。
HTMLのエンコーディングキャラクタセットを指定します。Autoにしておくと自動的に切り替わります。
通常Autoで使用しますが、特別な指定が必要な場合にはここで指定します。
③の正規化パターンで①のテキストを対象にパターンマッチを実行し、その結果を②に表示します。
また、パターンマッチをする前にパターンの中の括弧の数が合わないとその旨表示されます。
「既定のオプション」は正規表現エンジンの既定のオプションで次のような設定になっています。
・パターンは、ECMAScript 正規表現ではなく、標準の形式として解釈される
・正規表現パターンは、左から右に入力文字列と照合される
・比較では大文字と小文字が区別される
・^ 言語要素および $ 言語要素は、入力文字列の先頭および末尾
・. 言語要素は、\n を除く任意の 1 文字と一致
・正規表現パターンに含まれる空白は、リテラルの空白文字として解釈
・パターンを入力文字列と比較するときに、現在のカルチャの規則を使用
・正規表現パターンのキャプチャ グループは、暗黙的に指定される場合と明示的に指定される場合がある
オプションはコンストラクターまたはメソッド呼び出しの options パラメーターで指定されます。
パターンに埋め込むインラインオプション指定で (?imnsx-imnsx) の書式で指定することもできます。
この二つの指定方法が競合した時にはインラインオプションが優先されます。
③の正規化パターンを正規表現規則に従い分割表記して、それぞれに意味を付記して読み解きます。
正規化パターン作成画面を開きます。
単語検索が実行されて合致した単語がある場合、その単語が作成画面に転送されます。
正規化パターンを集めたファイルを選択して開きます。
③の正規化パターンに名前を付けて保存します。
パターンの名前を聞いてきますので適当な名前を付けて保存します。名前は ≪ ≫ で囲まれて保存されます。
指定のファイルに新しいパターンが追記されます。
PCが内蔵しているフォントから選べます。大きさは9,10,11の中から選択できます。
アプリ画面を最前面に表示するボタンです。最前面になっている時ボタンの背景が黄色に変わります。
Help画面を開きます。
・このヘルプ画面に加えマイクロソフトから引用した「クイックリファレンス」、「正規表現構文」が用意されています。
選択ボタンにあるRadioボタンでヘルプ画面が開くときの表示コンテンツを指定できます。
・また、正規表現に関するマイクロソフトサイトをこのヘルプ画面から閲覧できます。
「Webを閲覧」にあらかじめ関係するサイトが登録されており、プルダウンメニューから閲覧したいサイトを選択します。
①のテキストで単語を検索します。③のパターン欄に検索する単語を入力し「検索」ボタンをクリックします。
単語が存在したら隣の「C」の背景が赤く変わります。続けて「検索」をクリックすると次の単語の検索を開始します。
単語が検出された場合、パターン作成画面を開くとこの単語が引き渡されます。その使い方はパターン作成参照。
このボタンの背景の赤は検索中で検索単語が存在することを意味します。
このボタンをクリックすると検索が終了します。
③パターン欄に記入した正規化パターンをドロップリストに登録します。記入しただけでは登録されません。
ドロップリストに登録されている正規化パターンを並べ替えを指定します。
「昇順」の指定があると19.の正規化パターンをドロップリストに登録するときに昇順ソートされる位置に登録されます。
「着順」の指定の場合、ドロップリストの末尾に正規化パターンが登録されます。
「昇順」を指定した後「着順」に戻しても並びは変わりません、「着順」指定した後の登録位置が末尾になります。
現在表示されている正規化パターンを削除します、同時にドロップリストからも削除されます。
ドロップリストを設定ファイルに保存します。次回アプリ起動時にその設定が読み込まれます。
通常、ドロップリストにパターンを登録してもそのパターンは保存されずアプリ終了までの使いきりになります。
次回も使う場合はここで保存しておきます。
クリップボードからの入力を有効にします。クリップボード入力があった時の動作を次のように指定します。
何もしない時には Noneにチェックを入れます。
ここにチェックが入っている時、クリップボード入力文字列の先頭が http だったらWebにアクセスします。
ここにチェックが入っている時、クリップボードを正規化パターンとしてテキスト欄のパターンマッチングを実行します。
ここにチェックが入っている時、クリップボードを正規化パターンとして、そのパターンを読み解きます。
本アプリは、対象テキストとしてhtmlを想定しており、KeyWordを含むhtmlの全タグをリストアップします。
その中から1つのタグを選択し、それを下敷きにしてパターンを作成します。
この画面で作成したパターンの簡易マッチングが可能です。
基本的な使い方は
KeyWordで単語を指定し①にタグをリストアップします。
ターゲットとなる文字列を含むタグを1つ選び②に表示させ、パターン作成の下敷き(平文)にします。
平文(②欄)の特定文字列を反転させ、その文字列をパターン化します。
各ボタンをクリックしてその機能をご覧ください。
ここで作成するパターンの起源となる複数の文字列リストです。この文字列は⑤のKeyWord(単語)を含む文字列です。
この中からパターン作成の元となる1行の文字列を選んで②の欄に転写します。
この欄が空白の状態でもパターン作成はできます。
この場合パターンの起源がありませんので、②のパターン化対象文字列をあらかじめ準備する必要があります。
①からここに転写された1行の文字列を元に正規化パターンを作成します。
正規化パターンと区別するためにここの文字列は「平文」と称することにします。
この画面で作成する正規化パターンがここに記述されます。
パターンは以下に述べる方法で半自動的に生成され、それを文字単位で修正することもできます。
②の平文には含まれていない文字列やキャプチャのグループ名などをここから入力します。
スペースで区切り、最大2つのパラメーターを指定することができます。
原則としてShiftキーを同時押しすると平文のまま、Shiftキーが押されないと正規化されてパターンに入力されます。
第1パラメーターがグループ名などの名称に使われる場合、Shiftキーに関係なく平文のままパターンに入力されます。
メイン画面からのKeyWord(単語)転送をここで受け取ります。
単語を受け取った場合、自動的にKeyWord(単語)の前後の文字列を取得して①ソースリスト欄にリストアップします。
文字列の取得方法には「1Tag」と「後方Tag」のチェックの入れ方に応じて3通りあります。
(1)「1Tag」と「後方Tag」にチェック無し:KeyWord(単語)の前後の文字数指定に従い文字列を取得
(2)「1Tag」のみににチェック :HTMLにある KeyWord(単語)を含むタグを一つ取得
(3「1Tag」と「後方Tag」にチェックの時:HTMLにあるKeyWord(単語)を含むタグから後方のタグまでをまとめて取得
条件を変えて「取得」ボタンをクリックして①にソースリストを得ることもできます。
KeyWord(単語)欄を空白にして「取得」ボタンをクリックすると、①のソースリストが消去されます。
ソースリストの文字列は、正規化パターンを作る時の元になると同時にパターンマッチする対象にもなります。
②の平文からワンボタンで正規化パターンを作成します。
平文の中のキャプチャする部分を反転表示させます。反転されていない部分は平文のままパターン化されます。
キャプチャのグループ名はデフォルトで<name>ですが、汎用入力欄で別の名前を指定することができます。
ボタンをクリックすると②の平文全体を使って .+? の任意文字の最少一致のキャプチャパターンを生成します。
平文の反転部分の末尾に3文字の拡張子がある場合、それをパターンに付加します。
html と jpeg は4文字ですが、例外的に対応しています。
これに優先する形で、汎用入力欄で拡張子を指定することができます。この時反転部の拡張子は無視されます。
汎用入力欄に 「キャプチャグループ名」「スペース」「.拡張子」 の書式で記入します。 「.拡張子」 だけでも有効です。
パターン作成に使うボタンです。
②の平文の中の反転部分が正規化規則に従い文字単位で正規化され③の正規化パターン欄に追記されます。
※Shiftキーを同時押しした時は文字は正規化せず、エスケープ文字には¥を付けて平文のまま処理されます。
パターン作成に使うボタンです。
②の平文の中の反転部分が平文のまま(エスケープ文字の前には¥を付けて)、③のパターン欄に追記されます。
パターン作成に使うボタンです。②の反転部分をキャプチャするパターンを作成します。
キャプチャのグループ名はデフォルトで<name>ですが、汎用入力欄にグループ名を記入するとそちらが優先されます。
この時、汎用入力欄の第1パラメーターは常にグループ名としてShiftキーに関係なく平文のまま入力されます。
このボタンを右クリックするとメニューが開きます。
(1)任意文字 .+? でキャプチャ:反転文字列すべてを .+? で正規化します。
(2)正規化ルールでキャプチャ:正規化規則に従い反転文字列を文字ごとに正規化します。
(3)平文のままキャプチャ:正規化せず平文のままパターンにします。エスケープ文字には¥を付加します。
このいずれかを選びます。ボタンを直接クリックすると(1)の動作をします。
※Shiftキーを同時押しした時は正規化されず、エスケープ文字には¥を付けてパターンに追加されます。
第1パラメーターがある場合はキャプチャグループ名を name から第1パラメーターに変えパターンに追記します。
反転された平文の正規化パターンが③に追記され、ボタン背景色が黄色に変わり続くパターンの入力を促します。
続けて②の平文を反転するか、汎用入力欄に文字を入力してクリックすると正規化してパターンに追記されます。
ボタンが単独でクリックされるまでこの動作が続きます。単独でクリックすると ) が入力され背景色が元に戻ります。
第1パラメーターはキャプチャグループ名を name から第1パラメーターに変えてパターンに追記します。
第2パラメーターはキャプチャパターンの末尾に付けられる拡張子になります。これは平文で追記されます。
拡張子として使用するので第2パラメーターは先頭がピリオド「.」でなければなりません。
パターンが③に追記され、ボタン背景色が黄色に変わり続くパターンの入力を促します。
このあとは上記動作と同じで、単独でクリックされるまでパターンが追記できます。
パターン作成に使うボタンです。
非キャプチャには複数のグループ構成体があります、ボタンを右クリックするとそれらの一覧メニューが開きます。
9種類の構成体から選択します。
(?imsx-imsx) 正規化のオプション指定
正規化オプション指定は、「(?imsx-imsx)」メニューを1回クリックすると (? が入力されます。
ボタン背景色が黄色になりオプションパターンの入力を促します。
続けて汎用入力欄でオプションを指定して「非キャプチャボタン」をクリックします。ボタン背景色が元に戻ります。
(?:pattern) 非キャプチャグループ
(?=pattern) ABC(?=XYZ) 直後にXYZがあるABC
(?!pattern) ABC(?!XYZ) 直後にXYZがないABC
(?<=pattern) (?<=XYZ)ABC 直前にXYZがあるABC
(?<!pattern) (?<!XYZ)ABC 直前にXYZがないABC
(?>pattern) pattern条件に一致する最長パターン
この六種類の構造体は、②平文で pattern に相当する部分を反転させておき、メニューをクリックします。
ボタン背景と③背景が黄色になります、続けて文字列を指定してクリックするとパターンを追加できます。
何も指定せずにクリックするとパターンは )で閉じられます。
汎用入力欄は第1パラメータのみが有効で pattern の部分がORで連結されたパターンに変わります。
平文の反転部分が patternA 、第1パラメータが patternB になり pattern は patternA|patternB になります。
Shiftキーを同時押しした時には平文のまま追加され、Shiftを押さなければ正規化して追加されます。
(?(name) yes | no ) <name>のキャプチャ一致でyes
代替え構成体で<name>or<キャプチャ番号>のキャプチャが一致した時 yes、一致しない時 no
(?( pattern ) yes | no ) patternのパターン一致でyes
代替え構成体で expression の正規化パターンが一致した時 yes、一致しない時 no
この構成体を使用する場合、汎用入力欄で (name or number) or ( expression ) を必ず指定します。
Yes の部分は②の平文の一部を必ず反転させます。2つの条件が満たされないと機能はスルーされます。
さらに汎用入力欄の第2パラメーターで no の部分を指定します。(この部分は後から追加することができます)
ここでメニューから機能をクリックすると指定した内容でパターンが生成され追加されます。
※Shiftキーを同時押しした時は文字は正規化されず、エスケープ文字には¥を付けて平文のまま処理されます。
メニューから機能をクリックすると、ボタン背景色が黄色になり no のパターン入力を促します。
②の平文の一部を反転するか汎用入力欄で no に該当する文字列を指定し非キャプチャボタンをクリックします。
|(OR)が自動的に挿入され末尾に ) が付加されてパターンが完結します。 ボタン背景が元の色に戻ります。
パターン作成に使うボタンです。
②平文で反転した文字種に応じたグループ表記でパターン化します。ボタン背景は黄色になります。
この状態でさらに②平文を反転したり汎用入力欄で指定すると|(OR)を付加してパターンを追加します。
何も指定しないでボタンをクリックすると ] でグループが閉じます。ボタン背景が元の色に戻ります。
※Shiftキーを同時押しした時は否定形グループを形成します。
パターン作成に使うボタンです。
ORでパターンを追加するときにクリックします。記号 | が追記されます。
パターン作成に使うボタンです。
単純にクリックすると .* がパターンに追加されます。
右クリックするとメニューが表示され、その中から選んで追加することができます。
パターン作成に使うボタンです。
単純にクリックすると ( が追加されます。右クリックで ( と ) を選ぶことができます。
二つの設定があります。
(1)英字(含漢字)と数字を同列に扱う w
チェックを入れると、英字も数字も w を使って表記します。チェックなしで数字は d を使って表記します。
(2)文字の繰り返しを数で指定 w+ → w{3}
チェックを入れると、文字の繰り返し回数を調べそれを{ }で明示します。チェックなしで+で一括表記します。
パターン作成に使うボタンです。汎用入力欄の文字をパターンに追加するときの形態を指定します。
(1)汎用文字を入力: そのままパターンに追加します。
(2){ 汎用 }を入力: 汎用入力欄の文字を { } でくくってパターンに追加します。
(3)< 汎用 >を入力: 汎用入力欄の文字を < > でくくってパターンに追加します。
汎用入力文字欄は平文でも正規化パターンでも、そのままパターンに組み込まれます。
パターン作成に使うボタンです。
URLに使う文字群を汎用入力欄に入力します。
パターン作成に使うボタンです。
ファイル名に使えない文字群を汎用入力欄に入力します。
③に作った正規化パターンを使って①のソースリスト欄を対象にパターンマッチを実行します。
合致する文字列があったら①のソースリストの該当する行が反転表示されます。
同時に②の平文欄にその行が表示され、文字列全体が反転表示されます。
パターンマッチングを終了するには、②平文欄か③パターン欄をクリックします。
パターンマッチして②平文全体が反転表示されている状態で、
「Group移動」ボタンをクリックするとキャプチャ部分のみが反転表示されます。
キャプチャグループが複数あるとき、このボタンをクリックするたびに反転表示位置が移動します。
最後まで行くとパターンマッチした平文全体の反転表示に戻ります。クリックするたびにこれを繰り返します。
③正規化パターン欄をクリアします。
③正規化パターンをメイン画面の③の正規化パターン欄に転送し、作成画面を閉じます。
作成画面を最前面に表示させます。ボタン背景が黄色に変わります。
③の正規化ーパターンは破棄して、パターン作成を終了します。
前節まで「正規表現読み解き・作成ツール RegEx7」の操作ボタン類を説明してきました、
ここでは簡単にRegEx7の操作手順を紹介します。
説明サンプルとしてAmebaブログのhtmlを読み込んで「マッチング検査対象」としています。
正規表現は、「いいね」のURLを取得するパターンで、URL のキャプチャグループ名を用いています。
(?<URL>.+?\.html) の記述には、
URLと言う名前で末尾が.htmlの文字列をキャプチャせよという意味があります。
パターン全体で、いいね! の前のタグから、末尾.htmlの文字列をキャプチャします。
「マッチング検査対象」欄にhtmlが表示されます。
図のように正規表現を読み解き、解釈説明が縦方向に並びます。
一番下には、読み解いた結果を横に並べて表示し、実際のパターンとの対比ができるようにしています。
正規表現パターンは、慣れないと記号の羅列でチンプンカンプンになります。そんなときにこの読み解きで何を意味しているのかが簡単に分かります。特に、他人の作ったものは分かりにくいものですが、これで悩まずに済みます。
正規表現パターンにマッチした文字列をリストアップしてくれます。
■Match(1)■ はパターン全体にマッチした文字列を示します。
≪Group1≫ は名前の有無に関係なくキャプチャされた結果の文字列を示します。
≪URL≫ は指定された名前でキャプチャされた結果の文字列を示します。
Amebaブログでは「いいね」は記事に1つ付加されています。サンプルブログは1ページ1記事設定になっているので、マッチする「いいね」のURLは1つだけです。
作った正規表現パターンが思った通りに機能するかを簡単にチェックできます。
Amebaブログの「いいね」ボタンにリンクされたURLを取得するためのパターン作成を例に説明します。
画面から作成ボタン をクリックすると下のような画面が現れます。
「いいね」の文字列はタグの中にはありませんので、Tagとして文字列を取得できません。
ここでは、KeyWordの前方300文字、後方20文字の文字数を指定して文字列を取得しています。
①実際には2行取得できたので、目的に適う1番目の文字列をクリックします。
文字列は反転し下の欄にコピーされます。この文字列がパターン作成の下敷きになります。
②文字列の先頭部分はURLではないのでキャプチャしません、図のようにキャプチャしない部分を反転させます。
③「平文パターン」ボタンは反転部分の文字列をそのままパターンに加えます。ここをクリックすると図のようにパターン欄に平文パターンが追加されます。
※平文部分には特徴的で、htmlの中から目的のURLを導くことができる文字列を選びます。
パターンづくりのコツはここら辺にあります。
次にキャプチャするURLのパターンを作成します。
④キャプチャグループ名を指定します。ここでは URL とします。
⑤中段の下敷きの文字列のURL部分を反転させます。
⑥「(?<>)キャプチャ」ボタンをクリックします。
すると図のように<URL>のキャプチャグループ名を付け、拡張子.html が付与されたキャプチャパターンが得られます。
この時 URL と書いた汎用欄と 「(?<>)キャプチャ」 ボタンの背景が黄色になります。
⑦続けてパターン入力ができますが、ここでは単独で 「(?<>)キャプチャ」 ボタンをクリックします。
閉じる括弧 ) がパターンに追加され、背景の黄色が消えます。
図の反転した部分は任意の文字で良いので .+? のパターンを続けて入力します。ここでは .html 直後の?は ¥を付与してそのまま残しています。
説明のためここでは、手入力でパターン化していますが、 「.+任意」 ボタンを使うこともできます。
「.+任意」 ボタンを右クリックすると数種類のパターンが表示されるので、条件に合うパターンをクリックすると、そのパターンを追加できます。
最後に「いいね」の部分を反転させ、平文パターンボタンでパターンに組み込みます。
これで 「いいね」 のURLを取得するための正規表現パターンが出来上がります。
「一括正規化」ボタンを使うとより簡単にパターンを作成できます。
①先ず、キャプチャしたい文字列を反転させます。
②次に、「一括正規化ボタン」をクリックすると反転部分が正規表現でパターン化され、非反転部分は平文のままパターン化されます。中段に表示されている文字全てが対象となります。
識別に寄与しない文字は予め削除したり短い文字列に置き換えておくと作業性が向上します。
③の反転部分はURL抽出には影響しないため任意文字に置き換えます。
いいね!</iframe> を残して不要部分を .+? に書き換えればパターンが完成です。
RegEx7では このように簡単にパターンを作ることができます。
RegEx7 が正規表現をお使いの皆さまの一助になれば幸いです。