2007年7月22日日曜日

JeneViewの正規表現を使用するときの注意点 datデータ編

JaneViewは2ちゃんねるのスレッドデータを保存している「datファイル」を直接読んで、マッチする文字列を検索します。

# 詳しくは後述しますが、datデータはブラウザに表示されている内容と微妙に違います。 通常、正規表現で改行にマッチさせるときは \r\n を使いますが、Janeで改行にマッチさせる場合は、<br> を使います。

datファイルは、<> 区切りのCSVフォーマットとなっています。 下記は、ある一人の投稿者のdatデータの参考例です。

Jane使いの名無しさん<>sage<>2007/07/21(土) 21:00:00 ID:XXXXXXXXX<> ここは NGEx.txt を晒すスレです。 <br> 前スレ <br> NGEx.txtを晒すスレ <br> http://jane.s28.xrea.com/test/read.cgi/bbs/1068846004/ <>NGEx.txtを晒すスレ2

このように、datファイル上では、一人の投稿者の投稿内容は一行で表されます。 それぞれの内容は「名前<>メール欄<>投稿日時<>本文<>スレッドタイトル」となっています。 (スレッドタイトルはスレッドを立てた人のデータだけに書き込まれ、No.2 以降の投稿者のデータには書き込まれません。)

Janeからdatファイルを参照する

Janeはスレッドを取得したときに、「Janeをインストールしたフォルダ\Logsch\板名\スレッド番号.dat」にdatファイルを保存します。 しかし、ここから該当スレッドを探すのは面倒なので、もう少し簡単な方法を紹介します。

Janeを終了した状態で、Jane2ch.exe があるフォルダの command.dat をメモ帳などのテキストエディタで開いてください。 (command.dat がなければ、新規テキスト文書.txt を作成して、command.dat にリネームします) そして、以下の内容をコピー&ペーストして、上書き保存します。

*各種設定=
[Tab]*datを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$LOCALDAT"
[Tab]*AAListを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$BASEPATHaalist.txt"
[Tab]*NGEx.txtを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$BASEPATHNGEx.txt"
[Tab]*Command.datを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$BASEPATHcommand.dat"
[Tab]*ImageViewURLReplace.datを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$BASEPATHImageViewURLReplace.dat"
[Tab]*ReplaceStr.txtを開く="C:\Program Files\Hidemaru\Hidemaru.exe" "$BASEPATHReplaceStr.txt"

# "C:\Program Files\Hidemaru\Hidemaru.exe" の部分には、任意のテキストエディタをフルパスで指定します。 [Tab] はタブ文字 ([Tab] キーを入力して出現する文字) に変換してください。

Janeを起動し、何らかのスレッドを開きます。 [コマンド -> 各種設定 -> datを開く] で現在閲覧しているスレッドのdatファイルが開きます。

# コマンドから確認する方法は、ReplaceStr.txt でも使えます。

# 特定のレス番のdatデータを参照したいときには、[レス番を左クリック -> NGに追加] から確認したい項目を選択します。
# それぞれ、NGに追加するまでワンクッションあるので、NGに追加することなく確認できます。
#
# 名前  … [NGNameに追加] で確認
# メール … [NGAddrに追加] で確認
# 本文  … [datからNGWordに追加] で確認

タブ文字は半角空白に変換される

タブ文字を2ちゃんねる掲示板に投稿すると、「タブ文字 → 半角空白」の変換をした上でdatに保存されます。

空白文字は [  ] でマッチさせる

空白文字とは、半角スペース, タブ文字, 改行コード, 復帰コード, NULL など、目に見えない文字のことです。 正規表現では \s で表されます。

全角空白も含めた空白文字にマッチさせる場合、(?:\s| ) と書きたくなりますが、datに保存されるときに「タブ文字, 改行コード, 復帰コード」が別の文字列に置換されるため、もう少し簡単に書き表すことが出来ます。

[  ]

実際には、[  ]* と書くことが多いでしょう。

改行は <br> でマッチさせる

改行にマッチさせるときには、\r\n ではなく  <br>  を指定します。 (<br> の両端に空白がある点に注意してください。)

ただし、非公式の掲示板の中には空白がないところもあります。 そこで、空白文字を0回以上消費させることで両方に対応させます。

[改行1つ]
[  ]*<br>[  ]*

[1回以上の改行]
(?:<br>[  ]*){1,*}

[0回以上の改行]
(?:<br>|[  ])*

<br> はHTMLで規定されている要素(タグ)です。 br要素 "line break"で検索すると参考サイトがHITします。 こちらは「改行するタグ」と覚えておくだけでよいと思います。

文頭/文末の空白文字を考慮する

公式の2ちゃんねる掲示板に書き込むと、dat保存時に本文部分の「文頭/文末」に半角空白が挿入されます。 非公式の掲示板の中には、空白が挿入されないところもあるので、空白の有無に関わらずマッチさせることで全ての掲示板に対応させます。

[文頭にマッチ]
^[  ]*

[文末にマッチ]
[  ]*$

[本文が存在しない or 空白のみの本文 にマッチ]
^[  ]*$

<>&" は HTML文字実体参照 でマッチさせる

「<>&"」を2ちゃんねる掲示板に投稿すると、HTML文字実体参照に変換してdatに保存されます。 <>&" にマッチさせるには、それぞれ以下のように指定します。

<  … &lt;
>  … &gt;
& … &amp;
" … &quot;

HTML文字実体参照はHTMLで規定されている文字です。 HTML文字実体参照 で検索すると、参考サイトが多数HITします。 なかなか使う機会が多いので、一度目を通しておくと良いかもしれません。 (>>1 などのレスアンカーにマッチさせる時に必要になります)

# 2ちゃんねる掲示板に投稿するとき、<>" は自動的にエスケープ(上の書式に変換)されますが、& だけはエスケープされません。 従って、HTML文字実体参照を含む文字を投稿すると、HTML文字実体参照が有効なまま投稿されることになります。 NGEx, ReplaceStr.txt の正規表現など、投稿内容を改変せずに投稿したい場合は、テキストエディタ等で「& → &amp;」の一括置換を行ってから投稿してください。

# 個人的には、「& → &amp;」の変換をJane側で処理してくれると嬉しかったり…。 正規表現を晒すスレッド等で、&だけ全角で書いている方がいたり、HTML文字実体参照が有効なことを知らないでミスする方をしばしば見かけます。

レスアンカーは HTML文字実体参照、a要素 でマッチさせる

レスアンカーとは、>>1 のようなレス番を指定するアンカーのことです。 レスアンカーは掲示板によって二種類の書式があり、完全対応するためにはそれぞれの書式を確認する必要があります。

# a要素を付加しない板の場合
&gt;&gt;1

# a要素を付加する板の場合
<a href="../test/read.cgi/win/1111111111/1" target="_blank">&gt;&gt;1</a>

両方に対応させるには、以下のように書きます。

<a [^>]+>&gt;&gt;1</a>|&gt;&gt;1

ラベル: , , ,

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム