WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:特定文字列を含んだ table タグの除去

ochamu [MAIL] [WriteDate : Sun Jun 24 05:35:11 2001]

はじめまして。
今ちょっとしたスクリプトを組んでいるんですが、以下のような table タグを削除する正規表現を教えてください。

<TABLE>
<TR><TD>
abc
</TD></TR>
</TABLE>

<TABLE> 〜 </TALBE>を全部削除したいのですが…。
すぐ分かってしまう方いましたら教えた下さい。
お願いします。


andi [WriteDate : Sun Jun 24 17:38:58 2001]

s!<table>.*?abc.*?</table>!!mgi;
で削除できますか?


ochamu [MAIL] [WriteDate : Mon Jun 25 09:41:33 2001]

> s!<table>.*?abc.*?</table>!!mgi;
> で削除できますか?

回答ありがとうございます。
書き忘れてしまったんですが、
処理をする対象のファイルの中には TABLE タグが複数あって、
その中の特定の文字列を含んだ TABLE タグだけを削除したいと考えています。
教えていただいた方法だと、最初の TABLE から
最後の TABLE が対象になってしまわないでしょうか?
よくタグの終わりを [^>]*> で表現された正規表現を見かけるんですが、
これで [^<\/TABLE>]*<\/TABLE> ができればいいのにと思っています。
何かよい方法はないでしょうか?


andi [WriteDate : Mon Jun 25 11:25:24 2001]

すみません。他の<table>も考慮していたのですが、
確認を怠っていました。

s!(.*)<table>.*?abc.*?</table>(.*)!$1$2!isg;

で如何でしょうか。


ochamu [MAIL] [WriteDate : Tue Jun 26 02:14:48 2001]

s!(.*)<table>.*?abc.*?</table>(.*)!$1$2!isg;
で如何でしょうか。

う〜ん、実行中にエラーが出てしまいました…。
試しに対象のファイルに検索をかけてみましたが、
パターンが見つからないとのことでした…。
あ、対象の html ファイルはもちろん改行コードは削除してあります。
ところで、「.*?」の部分はどういう意味なんでしょうか?
「.*」「?」と、それぞれならば分かるのですが。
もう少しご教授下さい。


andi [WriteDate : Tue Jun 26 03:00:41 2001]

> 実行中にエラーが出てしまいました…。

Perlのバージョンはいくつですか??
5以上であれば大丈夫だと思いますけど。

> 改行コードは削除してあります。

改行コードは関係ありませんよ。
後ろのsオプションで複数行でマッチできます。

> 、「.*?」の部分

最短マッチです。


ところでどんなコードで試しているんですか??


ochamu [MAIL] [WriteDate : Tue Jun 26 09:28:39 2001]

プロバイダを調べたところバージョンは5.005でした。

どんなコードといいますと、作っているスクリプトでしょうか?
会社からだとちょっとアクセスできないので、
帰ってからテキストででもあげておきますので、
お時間のあるときにでも見ていただけないでしょうか?

これまで正規表現にあまり馴染みがなかったものですから、
ちょっと苦労しています。

よろしくお願いします。


ふじ [URL] [WriteDate : Tue Jun 26 14:34:13 2001]

> s!(.*)<table>.*?abc.*?</table>(.*)!$1$2!isg;
これだと、マッチするテーブルが複数あった場合に最後のしか
削除されないのでは?
・最初の (.*) がまず文字列の最後までマッチ。
・バックトラックしていって、最後の <table>.?abc.*</table> にマッチ。
・後ろの (.*) が文字列の最後までマッチ。
という動作をするので。

s!(<table>)(.*?)(</table>)!$r = $1.$2.$3; ($2 =~ /abc/) ? "" : $r !eisg;
こんなのでどうですかね。
# 削除対象のテーブルの中が入れ子になってると、これでもだめですが。


andi [WriteDate : Tue Jun 26 14:44:00 2001]

>> s!(.*)<table>.*?abc.*?</table>(.*)!$1$2!isg;
>これだと、マッチするテーブルが複数あった場合に最後のしか
削除されないのでは?

あ、申し訳無いっす。

1 while s!(.*)<table>.*?abc.*?</table>(.*)!$1$2!is;
これで・・・(笑)。


ochamu [MAIL] [WriteDate : Wed Jun 27 00:56:38 2001]

andiさん、ふじさんこんばんは。
家に帰ってきたので、
とりあえずスクリプトをあげます。
自分のオリジナルではないので、全部は理解していません。

URL:http://www5a.biglobe.ne.jp/~ochamu/cgi/iproxy.txt

よくあるんですが、cgiファイルを(自分のところから)ダウンロードして、
名前を変えて上げ直すとサーバエラーが起こるのはなんなんでしょう?
パーミッションにも転送モードにも注意してるんですが…。
先日のエラーもこれと同じもののようです。

正規表現の方もずいぶん難解になってきてしまいました…。


andi [WriteDate : Wed Jun 27 09:58:43 2001]

> 名前を変えて上げ直すとサーバエラーが起こるのはなんなんでしょう?

自分には分かりませんです。申し訳ない。

本題はhttp://www5a.biglobe.ne.jp/~ochamu/cgi/iproxy.txtの136行目のやつですか?

これを
> 1 while $tmp =~ s!(.*)<table>.*?ss01.*?</table>(.*)!$1$2!is;
にしてみてはどうですか?
上手くいけば良いのですが。


ochamu [MAIL] [WriteDate : Sun Jul 8 16:32:16 2001]

andiさん、ふじさんこんにちは。
返事が遅くなってしまって申し訳ないです。

例のサーバエラーなんですが、
RootFtp、NextFtp、FFFtpといろいろ使ってみたんですが、
どうも起こってしまっていて教えていただいたコードを試せずにいました。
ところが今日、初心に戻って DOS 窓で試してみたら一発でうまくいきました!!
コードもちゃんと働いていて、削除したい部分がしっかり消えていました。

実は i-mode 未対応のページを CHTML で見られるようにするサンプルコードを、
自分がいつも見ているページに特化させたものが欲しかったので作っていたんです。
パケット代の関係で、できるだけデータの小さいページにしたかったもので…。

お二人のおかげでよいものができました!
どうもありがとうございました!!

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World