したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

htmltodatサポートスレッド

794 ◆/vmukiyuzw:2013/11/10(日) 23:12:44
>>793続き)

1.コメント問題

拡張正規表現では「(?#・・・)」の形式でコメントを入れる事ができます(>>793の例参照)。
実は、拡張正規表現でなくてもこの形式でコメントを入れる事はできるのですが、
改行の無い一行の正規表現中にコメントを入れても逆に可読性を損ねるのではないかと考えます。
途中改行が可能な拡張正規表現でこそ意味があると思います。

ところで、今まで htmltodat では正規表現のデリミタに慣習的に「#」を使っていました。
(「m#〜#〜」みたいな形式で)
一般的にはperl形式相当の正規表現ではデリミタには「/」が使われる事が多いと思うのですが
htmltodat では検索の対象がhtmlテキストということで
(かつ、htmlテキストではタグ内に「/」が多用されるのでぶつかっちゃうため)
いちいちエスケープする手間を省くため「#」を使っていたわけです。
実はデリミタ文字は対になってさえいれば何でもよいので、
「#」でなければいけないわけではありません。
(「#」を使っていたのは、あまりhtml中には登場しないだろうというのと、
あとは個人的な好みです)

ところが、「(?#・・・)」の形式でコメントを入れる場合、この「#」とぶつかってしまいます。
ではデリミタの方を変えるのがよさそうです。
前レスの例では「#」の代わりに「`」(バッククォート)を使ってみました。
(「`」は正規表現上でもhtml上でも他とぶつかる可能性が少なくてよさげなので
今後使っていきたいと思います)

あと、本家perlでは拡張正規表現の改行した途中の各行の後や行間に
「#・・・」形式のコメントが使えるのですが、bregonig.dll でも
この形式のコメントも使えるようです。
(これは bregonig のドキュメントには明記されていないようなのですが
実際試してみると使える)
こっちのほうが読みやすいという人もいるでしょう。
以下の例は、実際には半角スペースで「#」の位置を揃えてるんですが、
この掲示板での書き込みでは連続した半角スペースは省略されるので
不ぞろいになって見えると思います。
(この省略がなければ個人的にはこちらの方式を推したい気もするのですが)

正規表現:
m`
<div\ id="(\d+)".*? # レス番号
<span\ class="n?em">.*?<b>(.+?)</b></span>.*? # 名前
\[(.*?)\].*? # メール欄
:(.*?)\s* # 投稿日・ID
<div\ class="comment">(.*?)</div> # レス内容
`imkx

(次レスに続く)


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板