- 485 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/03/09(金) 02:11:39 ID:3Cl7ivfL0]
- 自分で考えてフィルタを作りたいならもう少しプログラミング(論理学でもいい)の基礎を勉強したほうがいいよ。
もしくはほかの人がこれまでに書いてきたものを読んで理解したほうがいい。 例えば <a(rea|)>...</a(rea|)> としたんじゃ <a>...</area> にも <area>....</a> にもマッチするし、たぶんそれは意図していないマッチングだろう。 もう一つだけど最初のうちはアスタリスクを乱用しないほうがいい。 初心者にとってのアスタリスクというのはおそらく面倒なことをブラックボックスに詰め込んでどっかにやるためのツールなんだろうけど それじゃ何も上達しないし理解もすすまないだろう。 >(*href=$AV(\1)*|)&(*title=$AV(\2)*|) これなんかはアスタリスク乱用の好例だね。 やりたいことはhrefがあればその属性値を\1に代入し、titleがあればその属性値を\2に代入する、ということなんだろうけど hrefとtitle以外の属性値をすべて無視してしまえば、もっとシンプルな場合わけができるはずだ。 <a>, <a href>, <a href title>, <a title>, <a title href> というように。 あとはこのスペースを[^>]++で置き換えてやればhrefとtitle以外の属性値を上手に無視することができる。 例えばこうなる。 <a\s ([^>]++href=$AV(*)([^>]++title=$AV(*)|)[^>]+>|[^>]++title=$AV(*)([^>]++href=$AV(*)|)[^>]+>|[^>]+>) #これは<a>にはマッチしないけど、現実的にはそれでも問題はないだろう。 >(*href=$AV(\1)*|)&(*title=$AV(\2)*|) は初心者の好むブラックボックス化で ><a\s ([^>]++href=$AV(*)([^>]++title=$AV(*)|)[^>]+>|[^>]++title=$AV(*)([^>]++href=$AV(*)|)[^>]+>|[^>]+>) は論理的思考にある程度慣れた人が好むブラックボックス化だと考えてくれてもいいと思う。(優劣の問題にあらず) 論理学的には中身はまったく一緒だけどよりシンプルでより破綻しづらいのは後者。 { (A|B)&(C|D) = (AC|AD|BC|BD) } Proxomitronでのアスタリスクは賢い上に速度も最速な便利な道具だけど慣れるまでは上記のようなスタンスで取り組んだほうがいい。 高速化チューニングはその後からやってもいいんだから。
|

|