トップページ⇒php
986コメント301KB

正規表現道場@2ch

■ このスレッドは過去ログ倉庫に格納されています
0001ヽ(´▽`)ノ2001/07/26(木) 09:03ID:???
以外と毛嫌いして居る人も多そうな正規表現、
でもperlを使いのなす上で避けて通れない道だったりするかもです。
そこで、スクラップブック的に目に止まったカッコイイ正規表現を
書き留めておこうと言うスレッドです。
質問する時は言語と、得たい結果をなるべく詳しく書いてね。

取り合えず僕が知ってる有用なリンクです。
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・
020218501/12/21 03:29ID:???
>>200
おお、どうもありがとう。
こっちの船渡し問題は昔Cでhash使って、最短手数出るように
解いたんだけど、このスクリプトもちゃんと同じ17手になるんだね。


しかし、見にくいコード・・・。
020317401/12/21 06:58ID:???
>>197
ああ、それたまに欲しくなるよね。

$pattern ="hogehoge";

$dummy =/^${pattern}_[Gg][Ee][Tt]\s*=\s*(.*)/;

while( // ){
...
}

$patterm も case を ignore してほしいのよ。

素直に i つかえばいいんだろうけどさぁ...
020417401/12/21 07:00ID:???
>>203
ああ、ちょっと違う。

$pattern ="[Hh][Oo][Gg][Ee][Hh][Oo][Gg][Ee]";

だった。

んで、$dummy をどうするかって話...
0205JAPU@ハーマイオニー萌え ◆JAPUTeX. 01/12/21 07:18ID:???
>>203
何が言いたいのか良く理解できないので、想像して書きます。

$pat = "abc"; のとき、/${pat}de/ で "ABCde" も受理されるようにしたいっ
てこと? それなら/(?i:$pat)de/ とかいう感じで。(The letters between ? and
: act as flags modifiers, see the (?imsx-imsx) manpage.)

繰り返しになるけど、ある正規表現が受理する文字列は無限に存在する可能性
があるので、正規表現 => 受理する文字列を全て見つける は不可能だよ。正
規表現じゃなくて単純なパタンならある程度可能だけどね。
# 単純な例として、// とか /moe/ とかの場合考えると分かると思う。

とりあえず、>>203 は分かりやすい日本語でも書いてろってこった。
0206名無しさん@お腹いっぱい。01/12/21 08:15ID:???
>>203
の言ってることは意味不明だけど、>>197は「全て」とはひとことも
書いてない。一つだけでいいんだろ。

とりあえず、JAPUは脳内変換やめろってこった。

>>197
できないことはないだろうけど、正規表現パースして解析して
とかカナーリめんどくさいことになりそう。
0207名無しさん@お腹いっぱい。 01/12/21 08:37ID:???
パースして解析してってのは脳内長島用語ですか?
0208名無しさん@お腹いっぱい。01/12/21 08:53ID:EZ0rO4Ln
( ´,_ゝ`)   ・・・
0209名無しさん01/12/21 09:32ID:???
( ´,_ゝ`)   ぷ
0210名無しさん@お腹いっぱい。01/12/21 09:33ID:???
197みたいなのを作るのは面白そうだね。
学生さんの冬休みの自由研究としてちょうどいい分量かも。

1. 正規表現をparseしてオートマトンを作る。
2. オートマトンからゴールに向かって状態を遷移させていく。(無限ループに注意)

みたいな感じか。

1で作るオートマトンでのNFAとDFAの比較、2で最短の解を求めるアルゴリズム
なんかを考察してみるのも楽しそう。
0211名無しさん@お腹いっぱい。01/12/21 09:37ID:???
197です。

perlはあまり使ったことがないので、203さんの言ってることは
ちょっとよくわかんないんですが、

全てヒットする必要はありません。
一個でもヒットする文字列ができればいいんです。

if ($str =~ /\d+/) {
}
とかあったときに、ifが成立するようなstrを生成したいというだけなので、
全ては必要ないですし、長さが最低でなければならないというわけでもありません。

>>206
自分でもいろいろ考えた結果、自分でパースするしかないかと思い
かなりめんどくさそうだったので、もしかしたらなんかいい方法あるかも?
とか思い質問したんですが、やっぱ地道な方法しかありませんか……
0212名無しさん@お腹いっぱい。01/12/21 09:38ID:???
>>207
脳内長島用語って脳内長嶋用語のことですか?
0213名無しさん@お腹いっぱい。01/12/21 12:42ID:???
>>211
仕様が曖昧すぎるな
もう少し簡単に絞ればいくらでも実現方法はあるだろ
0214名無しさん@お腹いっぱい。01/12/27 00:04ID:8/UHgYLF
良スレあげ
http://123http://456http://789
↑ 1つのURLに… 笑!
0215名無しさん@お腹いっぱい。01/12/27 01:29ID:???
かっこわるいね
0216名無しさん@お腹いっぱい。01/12/27 02:16ID:???
>>214
よく意味が判らないのですが...
0217名無しさん@お腹いっぱい。 01/12/27 02:24ID:???
偏執クンだよ w
0218名無しさん@お腹いっぱい。01/12/27 08:38ID:???
https://123:456.7890123.456:789//0/00//...
0219名無しさん@お腹いっぱい。01/12/27 19:20ID:???
意味わからなくてヨーソロ
0220わかれ01/12/28 00:50ID:???
http://teri.2ch.net/test/read.cgi/bobby/1008921769/
http://tmp.2ch.net/test/read.cgi/kitchen/1009247793/

http://1.              ??
http://1.              ??
http://1.              ??
http://1.              ??
http://1.            ??????
http://1.          ??????????
http://1.      ??????????????????
http://1.    ??????????????????????
http://1.  ??????????????????????????
http://1.??????????  ??????  ??????????
http://1.????????  ??  ??  ??  ????????
http://1.????????  ??  ??  ??  ????????
http://1.??????????  ??????  ??????????
http://1.??????????????????????????????
http://1.  ??????????????????????????
http://1.      ??????????????????
0221test01/12/28 00:51ID:???
http://www. ヾ     ∧∧
http://www.  ゝ′ ̄( ∀)
http://www.   UU ̄U U
0222名無しさん@お腹いっぱい。01/12/28 00:58ID:???
>AA
青くなってないぞ・・・。
0223名無しさん@お腹いっぱい。01/12/28 01:11ID:???
ね、残念
フォームの中では絵になってたよ(w

↓こっちで楽しんでくれ
http://tmp.2ch.net/test/read.cgi/kitchen/1009247793/
0224名無しさん@お腹いっぱい。01/12/29 02:13ID:???
http://www..ヾ     ∧∧
http://www...ゝ′ ̄( ∀)
http://www......UU ̄U U
0225名無しさん@お腹いっぱい。02/01/05 04:37ID:jzyBr8o2
文字列と数字が混ざってるのを分離するうまい正規表現を教えてください。
0226名無しさん@お腹いっぱい。02/01/05 05:25ID:???
>225
よく意味がわからないなあ。
たとえば"14giko9mona033zonu7:@dd+i100"を、"14","giko","9","mona","033","zonu","7",":@dd+i","100"
に分割したいってこと?
0227名無しさん@お腹いっぱい。02/01/05 12:22ID:0tAKedaD
>>226
よくわからんけど、例えの労力に感動。
「ちがいます」の一言で終わりそうだけど。
たとえば・・・てのは、質問者がやらなきゃいけないことでしょう?(笑)
022822502/01/06 03:54ID:Ts5foqO9
>>226
その通りです!
例えば…を書かなくてすみません。お願いします。
0229名無しさん@お腹いっぱい。02/01/06 04:16ID:???
wakata
imakara
tukuruyo
mattetene
023022902/01/06 04:42ID:???
@mozi = (a..z);
$mozi = join("", @mozi);
@suzi = (0..9);
$suzi = join("", @suzi);

$data = 'abc940ab?!あkcc873ilo';
$naga = length $data;

for (0..$naga) {
$base = substr($data, $_, 1);
if ($mozi=~$base) { $char = 'mozi'; }
elsif ($suzi=~$base) { $char = 'suzi'; }
else { $char = 'hoka'; }
if ($oldchar eq $char) { $form[$#form].=$base; }
else { push(@form, $base); }
$oldchar = $char;
}

print "Content-type: text/html\n\n";
print join("<>", @form);

できた。
023122502/01/06 04:49ID:ksFrDwl4
>>230
ありがとうございます。まずコードを読んで勉強します。
でも、正規表現でもっとスマートにはできないでしょうか?
やはり、これくらいコードを書かなきゃだめですか
0232名無しさん@お腹いっぱい。02/01/06 05:18ID:???
これでどう? >>226のヤツ
$giko = '14giko9mona033zonu7:@dd+i100';

@kazu = $giko =~ /(\d+|\D+)/g;
$moji .= '"' . join('","' , @kazu) . '"';
print "$moji\n";
0233名無しさん@お腹いっぱい。02/01/06 05:26ID:???
わわ…
○ $moji =
× $moji .=
0234ダメ男02/01/06 05:27ID:EPBlOzfD
>>225

;### これでどうでしょう?
$_= '012abc$%@987ABC/=!';
$SEPA= '^K';
s/(\d)(\D)/$1$SEPA$2/g;
s/(\D)(\d)/$1$SEPA$2/g;
s/(\w)(\W)/$1$SEPA$2/g;
s/(\W)(\w)/$1$SEPA$2/g;
for ( split(/$SEPA+/) ){
  print $_,"\n";
}
0235名無しさん@お腹いっぱい。02/01/06 06:03ID:???
これだけでも出来た…。
$giko = '14giko9mona033zonu7:@dd+i100';
print '"' . join('","' , $giko =~ /\d+|\D+/g) . '"';
023622602/01/06 06:52ID:???
俺も書いてみた。
たとえば数字とそうでないものとに分けて2つの配列に格納したい場合。

my $str = '14giko9mona033zonu7:@dd+i100';
my @num;
my @notnum;
($1) ? push(@num, $1) : push(@notnum, $2) while $str =~ /(\d+)|(\D+)/g;

"033"の先頭の0をこの段階で取り除いて、数値として @num に格納したいのなら、
$1 の箇所は $1 + 0 に変更だね。
0237ダメ男02/01/06 06:53ID:n1rLEP+p
>>235

;### 1行で書くと↓のようになります。(ピリオドで連結しないでカンマで区切って出力したほうが処理が速い)
print '"',join('","' , ($giko= '14giko9mona033zonu7:@dd+i100')=~ /\d+|\D+/g),'"';
0238名無しさん@お腹いっぱい。02/01/06 07:08ID:???
>>235
それだと、もはや$gikoに意味が無いような…。これと同じ。
print '"',join('","' , '14giko9mona033zonu7:@dd+i100' =~ /\d+|\D+/g),'"';
023923802/01/06 07:10ID:???
間違えた
○ >>237
× >>235
0240ダメ男02/01/06 07:34ID:rx7aYtfj
;### 新たに作ってみました。
$_= 'aa14giko9mona033zonu7:@dd+i100';
$SEPA= "\033";
s/((\d+)|(\D+))/$1$SEPA/g;
for ( split($SEPA) ){
  @catch= (@catch, $_); ## または push(@catch, $_);
}
0241ダメ男02/01/06 07:39ID:GkL31czH
>>240 自己レス

;### 不要なカッコを書いていました。
s/((\d+)|(\D+))/$1$SEPA/g;⇒s/(\d+|\D+)/$1$SEPA/g;
0242ダメ男02/01/06 07:51ID:7uRhBz8j
;### 236を改造してみるとこうなります。
my $str= '14giko9mona033zonu7:@dd+i100';
push(@catch, $1 ? $1 : $2) while $str=~ /(\d+)|(\D+)/g;
0243名無しさん@お腹いっぱい。02/01/06 16:36ID:???
>>235
で一番シンプルな解が出てるのに延々続いてるのはなぜ?
@catch = ( $str =~ /(\d+|\D+)/g );
024424302/01/06 16:37ID:???
間違えた。
@catch = ( $str =~ /\d+|\D+/g );
0245225,23102/01/07 03:24ID:9HzJI0rF
>>232-244
いろいろな書き方があるのでとても勉強になりました
たくさんの方々、本当にありがとうございます^^
0246名無しさん@お腹いっぱい。02/01/09 01:40ID:Guhk8J3C
良スレ認定。
0247名無しさん@お腹いっぱい。02/01/11 16:12ID:???
40あげ
0248名無しさん@お腹いっぱい。02/01/13 14:15ID:???
良スレだとは思うけど、WebProgとは直接関係ないし。
なぜプログラム板にスレを立てなかったか問い詰めたい。
0249名無しさん@お腹いっぱい。02/01/13 20:08ID:???
>>248
そんなことないでしょ?
Perlだってhttpd.confだっておけらだってあめんぼだって
みんなみんな生きているんだ。
ていうか、WebProg意外に正規表現使わない人だって結構いますから。
0250(・∀・)!! 102/01/13 21:15ID:???
>>248
いや、それがですね旦那、旦那みたいな方ばっかりなら良いんっすけどね
あっちもアレな人が増えてきたんで、
正規表現 → 氏らねー → Perlじゃネーカ?? → よっしゃ煽ったろ
みたいになって荒れるより、こっちで静かに余生を送りたいなと思ったんすよ

// 試しにたててみます?  ^^;;
0251名無しさん@お腹いっぱい。02/01/13 21:32ID:???
>>250
試しに立ててみましたみたいな立て方すると、結果が予見できる・・・(笑)
0252(・∀・)!! 102/01/13 21:48ID:???
= 予想された展開 =
普通の人:どの言語でも良いの?、それともオートマトンとかエンジンの話するの?
  ↓
R**y屋さん:正規表現も積んでない言語は糞!!p**lはもっと糞!!r**y!!!
  ↓
D**phi屋さん:ハァ??ライブラリ使えば良いだろ?R**y逝ってよし!
  ↓
R**y屋さん:でるphなんか使うやしはあふふぉf R**y!!!!>>>>>>>D**phi

以下糞スレを増殖しつつ、無限ループ 

// 嫌すぎます・・
0253名無しさん@お腹いっぱい。02/01/13 23:04ID:???
>>252
いや、Perlでいいじゃんとか。
PHP・・・とか書いて放置されるとか、
漢はshつかえとか、入り乱れてのバトルロワイヤル。

でもないか。
025424802/01/14 23:31ID:???
なるほど、たしかに使用言語がらみの厨な応酬が起きそうで嫌ですね  >ム板
スクリプト言語だと特に。

そこまで考えてませんでした。やぼなツッコミしてすみませんです。
0255名無しさん@お腹いっぱい。02/01/15 01:35ID:/IL06s2P
2ちゃんとかで引用に使われる">>"を判別して自動リンクつけたいんですが、

$text = ">>2は逝ってよし!";
$text =~ s/>>[0123456789]{1,3}/<a href="">$&<\/a>/g;

ココまではできたんですが、アンカーのURLに引用もとの数字を入れたいんですが
(この場合だと"2")、それをどう取得したらよいか分かりません。
この正規表現の書き方では無理ですか?
0256名無しさん@お腹いっぱい。02/01/15 02:47ID:???
$_ = q|>>255は逝ってよし!|;
s#>>(\d+)#<a href="http://pc.2ch.net/test/read.cgi/php/996105815/$1">$1</a>#g;
print;
0257名無しさん@お腹いっぱい。02/01/15 02:58ID:???
$_ = q|>>256修正|;
s#>>(\d+)#<a href="http://pc.2ch.net/test/read.cgi/php/996105815/$1">$&</a>#g;
print;
0258255@へたれ正規表現02/01/15 03:03ID:???
>>256,>>257
ありがとうございます。
ここでつまってて、もう文字列解析しようと思ってました(藁
0259名無しさん@お腹いっぱい。02/01/18 15:45ID:DsGDZg+9
もの凄く基本的な事のような気がして恐縮なのですが、
「文字Aが含まれる行」は正規表現でどのように書くのでしょうか?
Aが含まれる行を全て削除(又は置換)したいんです。
0260名無しさん@お腹いっぱい。02/01/18 15:50ID:OQbDLabT
/.*ё.*/´д`/
0261 ◆AskaRoYg 02/01/18 20:49ID:???
open(FILE,"+<$file");
@data = <FILE>;

map {
if ($_=~/A/) { $_=''; }
} @data;

seek(FILE, 0, 0);
print FILE @data;
close(FILE);
----------------------------
なんか間違ってたら直して
0262名無しさん@お腹いっぱい。02/01/18 21:48ID:???
なんも間違ってないけど、明らかに間違ってるな。
026325902/01/19 02:06ID:???
頼むぜ、ブラザー。
0264名無しさん@お腹いっぱい。02/01/22 02:11ID:hOKQ9mVE
while(<>){ print unless m/A/ }
0265名無しさん@お腹いっぱい。02/01/31 17:52ID:???
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

メールアドレスの入力チェックなんだけどどーゆー意味?
0266名無しさん@お腹いっぱい。02/01/31 23:21ID:XvhUBoWr
$str = '<font size="5">冬は"寒い"。</font>夏は"暑い"。';

この<と>に囲まれてない部分の"だけ("寒い"と"暑い")
"に変換するには正規表現でどう書くんでしょうか?

$str =~ s/>(.*?)"(.*?)</>$1"$2/g;
と書くと2個目の"が変換されませんでした。
0267名無しさん@お腹いっぱい。02/01/31 23:23ID:XvhUBoWr
変換されてしまった。訂正です。

> "に変換するには正規表現でどう書くんでしょうか?
↓
> &quot;に変換するには正規表現でどう書くんでしょうか?
0268 ◆7P5EE/DI 02/02/01 00:08ID:???
>>261
とりあえず気が付いたことだけ。

1. 繰り返し処理``だけ''を行いたいならgrepやmapではなくforeachを使うのがよろし。
2. データの一部が削除されているので、truncateしてやらんと末尾にゴミがくっ付いてしまう。
0269名無しさん@お腹いっぱい。02/02/01 01:10ID:???
>>266
$str = '<font size="5">冬は"寒い"。</font>夏は"暑い"。';

こんなのしか考えつかない…。正規表現一発で出来るの?偉い人〜
foreach (split /(<[^>]+>)/,$str) {
    !/</ and s/"/&quot;/g;
    print;
}
027026602/02/02 01:23ID:YNNMuvTz
>>269
ありがとうございます。
そこから考えて、汚いですがとりあえずこんなので解決しました。
while ($str =~ s/>([^<]*)"/>$1"/g or $str =~ s/"([^>]*)</"$1</g) {}

もし正規表現一発で出来る方法があったらよろしくお願いします。
0271初心者02/02/02 03:29ID:oZiG+SwX
$str =~ s/\"/&quot\;/g; $str =~ s/<([^\>]*)=&quot\;(\w)&quot\;([^\>]*)>/<$1=\"$2\"$3>/g;

じゃだめなのか。
0272名無しさん@お腹いっぱい。02/02/02 03:58ID:???
URLとかスタイルシートがあるからだめだろうね -> \w
0273 ◆7P5EE/DI 02/02/02 06:05ID:???
一行だけど、なんだか。
こんなんしか出来ませんでした。

$str = join '', map { /^</ or s/"/\@/g; $_ } split /(<[^>]*>)/, $str;
0274 ◆7P5EE/DI 02/02/02 06:06ID:???
訂正。
$str = join '', map { /^</ or s/"/"/g; $_ } split /(<[^>]*>)/, $str;
0275名無しさん@お腹いっぱい。02/02/03 19:17ID:???
正規表現より良い表現(マッチ方法)って無いの?
0276名無しさん@お腹いっぱい。02/02/04 03:27ID:???
マッチョ法ってのがあるよ。
0277名無しさん@お腹いっぱい。02/02/04 03:37ID:???
>276
それどんなかんじ?
0278あぼーんNGNG
あぼーん
0279名無しさん@お腹いっぱい。02/02/04 06:14ID:???
>>277
ぐぐーるしてください。
0280名無しさん@お腹いっぱい。02/02/04 10:37ID:6Yw0Bfwo
>>275
これなんかどうよ?
文脈依存文法表現案
http://www.try-net.or.jp/~yoji/idea/gramagic/codgex.html

まだ案だけど、これが完璧になれば、圧縮ファイル中の html ファイルの
a 要素の href 属性の中で 2ch に関係してるものを検索、
とか出来るようになるのかな。まだ案だけど。
0281名無しさん@お腹いっぱい。02/02/15 04:54ID:???
>>278は何?
0282名無しさん@お腹いっぱい。02/02/15 07:48ID:???
マッチョ法age
028326802/02/16 21:03ID:???
あ・・・そうだ・・・ありがとう。
0284名無しさん@お腹いっぱい。02/02/28 01:43ID:xJe5pzKX
半角スペースは\sでいいんでしょうか?
複数スペースを一個にしたいので
$string =~ s/\s+/\s/g;
とやったらうまくいきません。ていうか
$string =~ s/\s/test/g;
とやっても半角スペースに反応しなかったんですけど、\sの理解が間違ってますか?
宜しくお願いします。
0285名無しさん@お腹いっぱい。02/02/28 01:50ID:???
tr/\x20\x09/ /s;
0286名無しさん@お腹いっぱい。02/02/28 01:52ID:xJe5pzKX
ああ、やっぱりそういうややこしいのになっちゃうのね。ありがとう。
ちなみにどうして284のは間違ってるんですか?
0287名無しさん@お腹いっぱい。02/02/28 01:53ID:???
>284
2番目のは反応したよ。

\sは[ \t\n\r\f]と同意。
半角スペースだけでなく,タブや改行にもマッチする。
0288名無しさん@お腹いっぱい。02/02/28 01:58ID:xJe5pzKX
あやや、それじゃあ僕の試験が間違っていたかな。
もっかいやってみます。ありがとうございました。
028928502/02/28 02:14ID:???
s/pattern/replace/[geoi];
左側のくくりのパターンには\sのような複数の意味をまとめたエスケープ表現は
使えるが、リプレイス部分に複数の意味を持つエスケープを書いても何に置き換えて
いいものかが曖昧になることを考えるとおのずと使えないということがわかります。
したがって、かくならつぎのようにも書けます。
s/\s+/ /g;
s/\s+/\x20/g;
0290名無しさん@お腹いっぱい。02/02/28 02:21ID:xJe5pzKX
なるほどなるほど。そのとおりだ。僕もそう思ってました(笑)。
ところで、
s/ +/ /g;
これじゃあだめですか。いや、だめだったんですけど..。
0291名無しさん@お腹いっぱい。02/02/28 02:32ID:???
>290
Perl5.004でうまくいったよ。
スレ違いぎみなのでsage
029228502/02/28 02:33ID:???
> 290
できるはずなんですが...

$_= 'a   b   c';
s/ +/ /g;
print $_,"\n";
029329002/02/28 02:49ID:???
なんでできないんだー。でもなんか、ド素人なんで疑う要因多すぎなんです。
勉強して出直してきます。ごめんなさい。
0294nobodyさん02/03/05 21:54ID:X1wZ/GVz
長すぎる半角英数等を(省略)と表示されるようにしようと思いましたが、
オートリンクのa要素のhref属性の値まで省略されたので、

$comment =~ s/(<a (.+)>)?(([\w\.\/\:]){20})([\w\.\/\:]){35,}(<\/a>)?/$1$3 \(省略\)$6/g;
と書いたのですが、今度は適用されるのが最後にマッチしたヤツだけになりました。

最後にgを付けてるのに全てにマッチされないのは何故ですか?
また、この記述より(・∀・)イイ!!のがあればご教授ください。
おながいします。
0295nobodyさん02/03/06 00:04ID:???

0296nobodyさん02/03/06 00:18ID:???
>295
なっ、なるほどぉ。

勉強になりました。
029729402/03/06 00:42ID:???
今日はもう、枕濡らして寝ます。枕ないけど。
0298nobodyさん02/03/06 01:41ID:???
>>294
複雑で私の頭じゃあまり理解できなかったのだけど
s/(\w{20})\w{5,}/$1(略)/g;
じゃダメ?
0299nobodyさん02/03/06 01:45ID:???
>>294
試してないけど最初を
<a [^>]+>
にしてみてはどうか?
0300nobodyさん02/03/06 05:25ID:???
>>294
一応できたよ.a要素だけに限らずタグの内側の文字列はいじらないようにしてみた.
つうか思いッきり>>273-274をパクッてます(w.制限は単純に5文字.

$comment = join '',
    map { /^</ or s/([:\.\/\w]{5})[:\.\/\w]+/$1(省略)/go; $_ }
    split /(<[^>]*>)/, $comment;


ついでにファイルから読み込みつつ変換するスクリプトも用意してみたよ.

my ($char, $tail) = (q{[:./\w]}, '');
open IN, "./in.html" or die;
open OUT, ">./out.html" or die;
while (my $comment = <IN>) {
    my @tmp = split /(<[^>]*?>)/, $tail . $comment;
    $tail = ($tmp[-1] =~ /^<.*>$/ ? '' : pop @tmp);
    $comment = join '', map { /^</ or s/($char{5})$char+/$1(省略)/go; $_ } @tmp;
    print OUT $comment;
}
close IN;
close OUT;

↓こんなふうにタグが複数行にわたって記述されていた場合を考慮してます.
<a
 href="http://hoge.hoge.hoge/"
 accesskey="h"
 title="ほげ〜">
030129402/03/06 06:52ID:???
>>297-300
みなさん、ありがとうございます。
300氏の方法で上手くいきました。
教えられた関数等について調べてみます。
ホントにありがとうございました!
■ このスレッドは過去ログ倉庫に格納されています