正規表現道場@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さん辺りが書いてくれるカモ・・・・
0763nobodyさん
02/10/21 14:31ID:+QmxDt3y何故か全角のスラッシュだけが置き換えされません・・
なんででしょうか?
$_ =~ s////g;
これでいいんですよね?
0764nobodyさん
02/10/21 15:06ID:???>>763
まず、lintで正しいhtmlかどうか確認しましょう。
>>762
ちなみに、あんたの予測ではどういう時に無限ループに陥る?
>>761
tbodyでtd、thと同じ行で共存しないでしょ。
$flg==1のとき(その行にtdかthがある場合)しか出力してないから
tbodyは無視していいのです。<\/*tfoot>の削除も実は不要だった。
>>760
<\/*thread>ってなってるでしょ。閉じはあってもあくても対応できるよ。
だれも書いてないことは、<tr>...</tr>の行が一行毎に改行されてない
のにかけたら、まったくだめだよってこと。その前処理を付ければ、
すばらーしスクリプトだな。
0765nobodyさん
02/10/21 15:49ID:???おっとうっかりしてた。
</*thead>とかじゃなくて、tr,td,thか。
それが閉じてないとやばいね。多分、lintには叱られるhtmlの書き方
だろうけど。それに対処するには、td,thのばやいは、次のtd,thか、改行まで、
trはもともと削除しちゃってるんだから関係ないと。
だから、上のスクリプトに
s#</t[dh]>#(</t[dh]>|<t[dh]>|$)#g;
すればいいっつことだな。
0766nobodyたん
02/10/21 18:17ID:???乗り遅れたが...
while(<>){
s/(.*?)[\r\n]*$/$1."\t".<>/es;
print;
}
ってのはどう?
0767nobodyさん
02/10/21 23:29ID:pPxXD5oZ一文字前が改行以外の「,」を検索することは
正規表現で出来るのでしょうか?
VBScriptの正規表現オブジェクトを使ってます。
[^\t\n],
だと改行が前に無い「,」とその一個前が取れてしまって・・・。
重ね重ね厨ですみません。。
0768nobodyさん
02/10/21 23:31ID:???0769主婦のサークルで〜す
02/10/21 23:55ID:Ah6hwMht私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/
0770762
02/10/22 00:35ID:???以下の2行のごく単純なテーブルで実行してみれば?
<table><tr><td
bgcolor="White">hoge</td></tr></table>
あと、念のために聞くけどCSVって知ってる?
0772nobodyさん
02/10/22 05:13ID:???ちゃんと人の書いてること読んでから書き込め。
<tr>...</tr>の行が1行ごとに改行されてるtableが前提だ。
前処理もすぐに書けるが書いてないといってる。
お前のおかげで貴重な資源が無駄になった。もう2chには来るな。
おまえはCSVに何種類かあるか知ってるのか?漏れの出したの何ていう
名前のCSV? Kで始まるよ。
そういうのが分かってる奴しか相手にしないからお前は早く氏ね。
0774nobodyさん
02/10/22 07:58ID:???まーまーおちけつ。
故意にせよ抜けてたにせよ、問題を含んでるのは確かなんだから、
より実用的なコードに仕上げた方が建設的ってもんでないかい?
0775nobodyさん
02/10/22 10:53ID:???<table>
<thead><tr><th>1</th><th>2</th><th>3</th></tr></thead>
<tfoot><tr><th>4</th><th>5</th><th>6</th></tr></tfoot>
<tbody>
<tr><td>7</td><td>8</td><td>9</td></tr>
<tr><td>A</td><td>B</td><td>C</td></tr>
<tr><td>D</td><td>E</td><td>F</td></tr>
</tbody>
</table>
の表示は
1 2 3
7 8 9
A B C
D E F
4 5 6
になるのでよろしく
0776nobodyさん
02/10/22 11:51ID:???while(<>) {
chomp;
$flg = 0;
$col = 0;
$line = $_;
$line =~ s/(<\/*thead>|<\/*tfoot>)//gi;
$line =~ s|</*tr.*?>||gi;
for $i (0 .. $#row_max) {
undef $row_data[$i] if $. > $row_max[$i];
}
while($line =~ /<(td|th)/) {
$flg = 1;
$col++;
$line = "$'$row_data[$col]$&$`";
if ($line =~ s|<t[dh][^<]+?rowspan.+?(\d+).+?>(.*?)</t[dh]>|"\",\"" . $2 . " (row: " . $1 . ")"|ei) {
$row_data[$col] = "<td>$2 (row: $1)</td>";
$row_max[$col] = $. + $1;
} elsif ($line =~ s|<t[dh][^<]+?colspan.+?(\d+).+?>(.*?)</t[dh]>|("\",\"" . $2 . " (cols: " . $1 . ")") x $1|ei) {
1;
} else {
$line =~ s|<t[dh][^<]*?>(.*?)</t[dh]>|","$1|i;
}
}
print "$line\",\"\n" if $flg == 1;
}
0777nobodyさん
02/10/22 12:04ID:???0778nobodyさん
02/10/22 13:28ID:???やっぱり、CSVにはスペース区切りしかないと思ってたのか。
教えといてやる。スペース区切り、タブ区切り、コンマ区切り、K3形式...
おまえみたいなうすまぬけな変換だと
<tr><td>おまえは馬鹿 糞馬鹿</td><td> お前はアフォ 大アフォ</td></tr>
<tr><td>おいらはK3</td><td>他にどんな形式あるか知ってるか? 何も知らなきゃ黙ってろ</td></tr>
は、
おまえは馬鹿 糞馬鹿 お前はアフォ 大アフォ
おいらはK3他にどんな形式あるか知ってるか? 何も知らなきゃ黙ってろ
こんなんなっちゃって、桁が合わなくなって使いみちないよ。
おまえの単純なデータを漏れのすばらーしスクリプトで変換するとこうなる。
","1","2","3","
","4","5","6","
","7","8","9","
","A","B","C","
","D","E","F","
どこにいちゃもん付けたいんだ。
0779nobodyさん
02/10/22 13:55ID:???>>778
775は一例でスペース区切り上げただけかもしらんだろ。
そもそもnobodyばっかで訳わかんねぇよ。
議論したいならトリップつけるか、自分が書き込みした最初の記事の番号ぐらい名乗れよ。
>>763 なんかtableとかCSVとかと何も関係なく質問しただけかもしれんのに、HTML-lintとか
ワケワカな答えされてるし。
傍から見てウザ過ぎ。
>>763
$_ =~s/\Q/\E//g;
って\Qと\EでくくればOK。
0780754=778
02/10/22 14:13ID:???あんたは喧嘩両成敗みたいなことやってるが、明らかに
悪いやつは、何の欠陥を指摘もできないで、漏れのスクリ
けち付けた>>757、>>775。
>>776は、すばーらしスクリをさらしてくれてありが�d。
「>>754はすばらーし」、だけでよかった。>>776も考えて
みりゃ、ネットのくずだ。早く逝け。
0781nobodyさん
02/10/22 14:24ID:???そうやって熱くなって他の人間にまで迷惑を掛ける。
いくらお前から見て>>757、>>775が悪でも、傍から見たら一括りにしてウザイんだよ。
そこんトコ分かってくれ。
0782754=778
02/10/22 14:26ID:X4lK8otn漏れは自宅のLINUXでやってた。ほんで、>>778は、会社の
Solarisでやった。ちょっと気になって、winでやったら、
こうなった。
","1","2","3
","4","5","6
","7","8","9
","A","B","C
","D","E","F
つまり、\x0d\x0aの改行コードがchompでは1個しか取れなくて、
print "$line\",\"\n" if $flg == 1;
で後ろに付くべき","が消えている。付いてるんだけど表示されない。
もう少し、修行を積むことだな。
0783nobodyさん
02/10/22 14:26ID:???0784754=778
02/10/22 14:44ID:???<table border="1">
<tr><td>おお</td><td>いい</td><td>うう</td><td>ええ</td><td>おお</td></tr>
</table>
は、
┌──┬──┬──┬─────┬─────┐
│おお│いい│うう│ええ</td>│おお</td>│
└──┴──┴──┴─────┴─────┘
になっちゃうけど?
それとも、漏れにhtml2csvじゃなくって、html-lint書けって言うわけ?
まったく別の質問だと思ってたけど?
ちなみに、
$_ =~ s////g;
eucではperlで問題無いけど、sjisでは、/が815Eだから、1バイト文字と重なるね。
81の00と5Eの^に。で、エスケープした方がいい?
0785754=778
02/10/22 14:48ID:???そうそう、sjisで日本語やってんなら、jperlにしたら、こいうこと
気にしなくていいんじゃない、って書こうと思ったんだ。
0786779
02/10/22 15:53ID:???へぇ、>>763はHTMLの話なんだ。どこからその毒電波でたの?
>>785は同意だけど。
あと君のスクリプトサラッと見てみたけど、colspanとrowspanの2つとも指定されたtdを含む場合
(<td colspan="2" rowspan="2">ほげ</td>ってみたいなの)、問題あるような気がするけど。
0787754=778
02/10/22 16:34ID:???それは考えてませんでした。うすうす気づいてたけど。
そういうまともな批判を待ってました。ありが�d。
<tr>...</tr>の途中で改行されてるデータと、solspan、rowspanが両方
指定されてるデータに対応したのを作ってみます。比較的すいてるので、
この前は上げたけど、不評なので、上げるかどうか分かりません。
0788nobodyさん
02/10/22 17:48ID:???0789nobodyさん
02/10/22 17:53ID:???・多分改行も関係ない
・多分バグある
・多分滅茶苦茶叩かれるw
http://homepage3.nifty.com/~moemoe/table2csv.pl.txt
0792789
02/10/23 01:50ID:???自分で書いといて何だがもっとコンパクトに書けそうな気がしたんで
添削キボンなんだが。
ってココまで行くと正規表現の範囲でも無いか。sage
0793754=778
02/10/23 02:53ID:???使い方を示した。rowspanだけは難しかったので配列をつかっちゃった。
>>754は、10分か20分で作ったので、さっき改行とcolspan、rowspanに
対応したのを配列なんか使わずに書いたが・・・
Perlのスクリプトを競うのなら「スクリプト改造工房」、「Perl
初心者コーナー」あたりにどうぞ。
0794775
02/10/23 03:05ID:???4 5 6
が2番目ではなくて最後になるってことで
区切りなんてどうでもよかったんでIEの表示結果を
コピペしただけだったんですが
0796754=778
02/10/23 03:31ID:???0797nobodyさん
02/10/23 10:13ID:???perlメモを見ましたが初級者にはどう考えても理解できません。
別に理解しなくてもサブルーチンとして貼り付ければいいだけかもしれないんですが、
ある程度何をやっているかわからないとやっぱり気分が悪いです。
で、皆さんが普段利用しているメールアドレスチェック正規表現を教えていただければこれ幸いです。
0798ぶっちー
02/10/23 10:36ID:IaWkOnQn文字列を「 [999KG] 」のように[]で囲みたくて正規表現を使って置き換え
してるんですがうまくいきません・・・
「オレ様,男,25才,189cm,98KG,12%」
みたいなカンジでカンマで区切ってある行が2000行くらいです。
この中の体重部分だけを[]で囲みたいんデス(泣;
0800789
02/10/23 11:13ID:???・改行関係のバグ
・余計なタグの削除
・その他
スレ違いなのでもうココまで。
>>794
漏れのは多分大丈夫かと。
>>797
$mail =~/^[0-9a-zA-Z_\.-]+@([a-zA-Z0-9][a-zA-Z0-9_-]*\.)+[a-zA-Z]{2,}$/;
>>798
v.3.00以降のみ対応。
・検索:,\f[0-9]*KG\f
・置換:,[\1]
,が付いてるのは名前のトコにも数字KGってくる可能性があるので。
0801nobody
02/10/23 11:23ID:???正規表現道場だから、
s/((.*?,){4})(.*?),/$1\[$3\],/;
しかし、普通は、配列を使って、
split/,/;
print "$_[0],$_[1],$_[2],$_[3],[$_[4]],$_[5]";
0802ぶっちー
02/10/23 11:34ID:IaWkOnQn神!できました!
どうもありがとうございましたヽ(´∀`)ノ
「タグ付き正規表現」ってヤツですね。
ま、それ知ってても自分でできたとは思えませんが・・・
0803ぶっちー
02/10/23 11:41ID:IaWkOnQn>>798サマ
>>801サマ
PG上でのマッチングじゃなくて秀丸で成形してから
SQLに渡そうと腐心しておりマスタ。いずれにせよ
ソース上で有用な構文、ありがとうございました!
0804nobodyさん
02/10/23 12:17ID:???0805nobodyたん
02/10/23 12:49ID:???と思ったり。
変に不完全なチェックするよりマシ。
0807nobodyさん
02/10/23 17:24ID:???どうしようもないわけだが
0808nobodyさん
02/10/23 17:57ID:???0810nobodyさん
02/10/23 20:28ID:???みたいに出来ますが、
「ある文字列を含まない」ってどうやるんですか?
0811nobodyたん
02/10/23 21:06ID:???(バックトラックしつつ、) 前から順番にマッチさせていって、最後まで行っ
たら受理されるってのが正規表現だから。
でも、perl の拡張正規表現を使えば出来てしまうのが気持悪いところ。
print "ok\n" if(/^(?!.*xyz)/); # "xyz" が入っていなければ表示される。
先頭の後ろに「任意の個数の文字に "xyz" が続く文字列」が来ないものにマッ
チ。= "xyz" を含まない文字列にマッチ。
0812nobodyさん
02/10/24 00:07ID:???print "ねーよ" if ($str !~/xyz/);
とか
print "ねーよ" unless ($str =~/xyz/);
じゃ問題あんの?
0813nobodyたん
02/10/24 00:19ID:???もちろん、普通はそういうコード書く。
0814りり
02/10/24 10:25ID:iH2BcaJhどうすればよいですか?
2002.9.1
2002.10.1
2002.11.31
また、与えられた文字列が日付のフォーマットではない場合のチェックは
どうすればいいですか?
教えてください。
0815nobodyさん
02/10/24 11:39ID:???die "日付じゃねーぞ" unless ($date =~/^(\d{,4})\.(1[0-2]|[1-9])\.(3[0-1]|[12][0-9]|[1-9])$/);
$year = $1; $month = $2; $day = $3;
# 2002.09.01もOK、日付の妥当性もある程度チェック
die "日付じゃねーぞ" unless ($date =~/^(\d{,4})\.(1[0-2]|0?[1-9])\.(3[0-1]|[0-2]?[0-9])$/);
$year = $1; $month = $2; $day = $3;
# うるう年とかあるし後でチェックするから取りあえず数字よこせ
die "日付じゃねーぞ" unless ($date =~/^(\d+)\.(\d+)\.(\d+)$/);
$year = $1; $month = $2; $day = $3;
0816nobodyさん
02/10/24 18:21ID:???0817nobodyさん
02/10/24 20:29ID:???どーでもいいと言わないで下さいね。
=~
ってすごく打ちやすいですよね!
!~
ってメチャ打ちにくいですよね?
皆さん、
!~
をあまり打たないようにコーディングを工夫した方が、
指疲れなくて体に健康ですね。
失礼しましたー
0818nobodyたん
02/10/25 02:51ID:???if(not $hoge =~ /REGEX/) { ... }
if(not $hoge = 123) { ... }
if(not $hoge eq "hage") { ... }
としている。
まぁ、とりあえず好きなように書けってことで。
0820nobodyさん
02/10/25 12:20ID:???わざわざ
if(not $hoge = 123) { ... }
と書く理由がわからん。以下のように書きなさい。
if(0){ ... }
0821声域表現
02/10/25 13:13ID:fEObcI9/ログファイルをlog.txtで保存してあります。
中身はこんな感じです。
番号,住所,電話,名前
で、フォームに番号を入力させて送信。
次のページで名前が出てくるって仕様です。
正規表現を用いてlog.txtの番号と同じ行にある名前を持ってきて表示させるには
どうしたらいいのでしょうか?
糞素人丸出しでスマソ、前後に上司でテンパーイ
0822nobodyさん
02/10/25 13:53ID:???print $2 if /$bango,{.+*,){2}(.+)/;
とか。
0823nobodyさん
02/10/25 13:55ID:???0824nobodyさん
02/10/25 13:55ID:???0825nobodyさん
02/10/25 13:59ID:???# 前のレスと同じバイトだと書き込めないのか。2重書きこですかだって。
08263
02/10/25 15:34ID:???稲垣達也ライブ 「水の音、風の音、光の音」(11;55〜 14:15〜)
場所:勾当台公園 連絡先:仙台市下水道局022-214-8813
2002.10.19(土) 大沢農学校ケナフ学科 (4) 作品づくり(さをり織 など)
場所:大沢市民センター 連絡先:大沢市民センター
2002.10.19(土)サイカチネイチャークラブ観察会
場所:国立南蔵王青少年野営場 連絡先:サイカチネイチャークラブ
08273
02/10/25 15:36ID:???2002.10.19(土)10-15h 2002仙台市下水道フェア (雨天決行)
稲垣達也ライブ 「水の音、風の音、光の音」(11;55〜 14:15〜)
場所:勾当台公園 連絡先:仙台市下水道局022-214-8813
2002.10.19(土) 大沢農学校ケナフ学科 (4) 作品づくり(さをり織 など)
場所:大沢市民センター 連絡先:大沢市民センター
2002.10.19(土)サイカチネイチャークラブ観察会
場所:国立南蔵王青少年野営場 連絡先:サイカチネイチャークラブ
のようにするにはどうすればいいでしょうか?
正規表現で、
2002.10.19
などの日付にマッチさせるのはわかるのですが、複数行にわたる処理って難しいですね。
0828nobodyさん
02/10/25 15:55ID:???s/\n\n(?!\d+\.\d+\.\d+)/\n/gs;
0830声域表現
02/10/25 16:15ID:fEObcI9/具体的に書きます。
log.txtの中身はこんな感じです。
0001 東京 国語 【山田】
0002 千葉 数学 【佐藤】
0003 埼玉 物理 【金子】
番号、住所、科目、名前が入っています。
仕様は番号を打ち込むとその行にある名前が返ってきます。
例えば0001と番号を打ち込み送信すると次のページで
「山田」と出てくるのです。
自分がイメージしている方法ではlog.txtに名前を書き込むときに
【】の括弧で挟んで名前を書き込み、呼び出してくるときに
「"番号(0001)"の列の【】(【山田】)で囲まれた部分を持って来い」
と言う、命令をしたいのです。
こうする事により”名前”がどこにあっても番号と同じ列の【】でくくられた中を
参照するので楽だと思ったのです、感覚的にですが。
これって正規表現で可能なんですか?
0831nobodyさん
02/10/25 16:21ID:???0832声域表現
02/10/25 16:24ID:fEObcI9/名前は行の一番最後にあると仮定すると。
0835nobodyさん
02/10/25 18:00ID:???マルチうざ
1 東京 国語 山田
2 千葉 数学 佐藤
3 埼玉 物理 金子
open(FILE,"./log.txt");
@hoge=<FILE>;
close FILE;
foreach (@hoge){
@temp=split(/\s/,"$_");
($hage,$hige)=("$temp[0]","$temp[3]");
$word{$hage}="$hige";
}
print "number :";
chomp($a=<stdin>);
print "$word{$a}\n";
0837声域表現
02/10/25 18:12ID:fEObcI9/ありがとうございます。
これを元にがんばってみたいと思います。
0838nobodyさん
02/10/25 21:17ID:I2JNYDvhなんとピンクローター300円から♪
マニアック商品などその他いろいろあります!
http://www.king-one.com
0839827
02/10/25 22:48ID:???ああ、やりたいことが確かに判りませんね。
迂闊でした。
改めて、質問いたします。
レコード区切りとなるものが存在せず、
2002.10.19
などの日付にマッチさせ、その前の行は空白を残して、
それ以外の空白を消すということです。
つまり、
\n\n\d\d\d\d\.\d+\.\d+.*
のようなものが区切りのキーになると思います。
0841Weasel
02/10/26 18:30ID:lT7ooPWdいるのですが、やり方がわかりません。
> 127.0.0.1 - - [10/Oct/2000:13:55:36 -0700]
> "GET /apache_pb.gif HTTP/1.0" 200 2326
> "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
というログフォーマットを
・IPアドレス
・日付
・時間
・ファイル
・処理コード
・バイト数
・参照元
・エージェント
でCSVにしたいのですが・・・
だれか教えてください。
0842nobodyさん
02/10/26 18:59ID:???0843nobodyさん
02/10/26 19:54ID:lT7ooPWdCSVってカンマで区切ったフォーマットのことですよね。
Apacheのログは基本的にスペース区切りなのですが、
単にスペースをカンマ(,)に置き換えると、GET /index.html
の中のスペースが区切られたり、いらない「”」が入ったり、
と困っているわけです。また、日付と時間を別のフィールド
にしたいので、正規表現を利用してきちんと指定したいのです。
今は
1 行を読み込む
2 - - [ を削除
3 日付の「2000:」を「2002,」に変換する
4 -9000] を削除
5 「"GET 」を削除
6 ダブルクォーテーションを削除
した上でスペースをカンマに変えてCSVにしています。
これを世紀表現を利用して、もっとスマートにしたいのです。
よろしくお願いいたします。
0844nobodyたん
02/10/26 20:39ID:???= m{(\S*) \s+ # remote
(\S*) \s+ # ident
(\S*) \s+ # user
\[(.*?)\] \s+ # datetime
"(.*?)" \s+ # request line
(\S*) \s+ # status
(\S*) \s+ # size
"(.*?)" \s+ # referer
"(.*?)" # user agent
}x;
とでもした後、適当に変形すれば良いだろ。
0845Weasel
02/10/26 20:47ID:lT7ooPWdありがとうございます。早速試してみます。
0846nobodyさん
02/10/26 22:48ID:???正規表現だけで解決できるかどうかわかりませんが、
あるディレクトリにcsvファイルが
data01.csv
data02.csv
……
data10.csv
のように存在しています。
これを
perlなどで処理したい場合、これらのデータをファイル読み取りのところで、
配列の配列の配列やハッシュのハッシュのハッシュ
という3次元データー構造に変換しなければ、その後のプログラミング
が煩雑になりそうで、いままで、ずーと避けてきました。
厨な私は、普段はこれをエクセルで処理してるんですが、
いっそのこと正規表現で処理してしまえないでしょうか?
なにかアドバイスありますか?
0848Weasel
02/10/27 00:52ID:5TH4jHN51 ディレクトリ下のファイル名を<*>で取得
2 ファイルを開く
3 tempファイルにファイル名と一緒に一行ずつ書き出す
4 ファイルの数だけ2と3を繰り返す
5 まとまったtempファイルを処理する
てな感じではどうでしょうか? とは言うもののdata01〜10.csvの
違いがわからないのですが?
0849Weasel
02/10/27 01:07ID:5TH4jHN5すみません。これPerlでしょうか?
m{ ... }x;
という書式の意味がわからないです。読み込んだ
ログファイルはどの変数に格納すればよろしいの
でしょうか?
大変あつかましくて恐縮ですが、何卒ご教授お願い
します。
0850nobodyさん
02/10/27 02:25ID:???は質問してもしかたないけど
perl式→説明
は「おしえて君」
ですよ。自分で調べられるでしょう。やりたいこと→perl式
は質問していいけど、
perl式→説明
は自分で調べられるでしょう。
0851nobodyさん
02/10/27 02:45ID:5TH4jHN5失礼しました。会社にラクダ本があるので、
月曜日に調べてみます。
0852nobodyさん
02/10/27 03:15ID:???/xモディファイアは、正規表現の中にスペースとかコメントが
入るのを許すもの。m{...}は、デリミタを(デフォルトの"/pat/"
だと"/"をエスケープしなきゃいけなくなるので)"{pat}"にするよ、
とういうことでつな。
>読み込んだログファイルはどの変数に格納すればよろしいの
>でしょうか?
普通に読み込めば?
open LOG, "hoge.log";
open OUT, ">fuga.csv";
while(<LOG>){
#844さんのコード
#その他必要な処理
print OUT "$remote, $ident, $user, ・・・\n";
}
close OUT;
close LOG;
みたいな感じで。
0854Weasel
02/10/28 02:01ID:pNQg1CBu>852
情報ありがとうございます。これってPerlの省略形だった
のですね。
1 変数の記述省略
while (<LOG>) {
print;
}
という指定は
while ($xx = <IN>) {
print $xx;
}
という指定と同じことなのですね。私は常に変数を記述していた
(もっというと、配列に読み込んでforeachを使用していた)ので
わからなかったです。
2 m{ ... }x; について
これが正規表現だということに気づきませんでした。
私はいつも
$ =~ s#abc#def#x
という形で利用していたので、上記のような指定ができることを
知りませんでした。
もっと勉強します。本当にありがとうございました。
0855nobodyさん
02/10/28 09:19ID:???正規表現にて日本語以外、ってどのように指定したらいいんでしょうか。
英字、数字、空白文字はOKで、日本語のみだめ。
jcodeとかつかわないとムリなんでしょうか?
0856nobodyさん
02/10/28 13:02ID:???0857827
02/10/28 15:19ID:???返事が遅くなりました。
0858nobodyさん
02/11/02 05:32ID:I/qwWelh/bbb
/aaa::bbb/ddd
/bbb/ccc::ddd
つまり
/aaa::bbb
/bbb
等の繰り返し
# aaa:: は省略可能です。
などにマッチさせようとしてるんですけど駄目っす。
助けてください。↓今のとこ、こんな感じ
(/([^:/]+::)?[^:/]+)+
かなり的外れっぽいですが(汗
0859nobodyさん
02/11/02 13:39ID:???0860859
02/11/02 14:31ID:???/^(?:\/(?:[a-z]+::)*[a-z]+)+$/;
● / と : 以外の文字が[a-zA-Z_]なら
/^(?:\/(?:\w+::)*\w+)+$/;
0861858
02/11/02 16:22ID:I/qwWelh目的としているのは、>859見たいな奴ですが、
Invalid regular expressionとか出てしまいました(;_;
regex.cで(GREP?SED相当?)最終的にできればいいんですが。
どうも
?:
のとこでコケテます。
ちなみに、
いいい::あああ/ううう
とかも可能にしたかったりします。
あああ、いいい、ううう
に入れられる文字は:と/以外といった感じで。
0862nobodyさん
02/11/02 16:45ID:ywtiXWSTstr1,str2,str3(str4,str5,str6)str7,str8,str9 なら str4,str5,str6 だけ
"," → "," と変換したいのですが、
どういう文にすればいいですか?
s/\(([^\)]+),([^\)]+)\)/\($1,$2\)/g;
を何回か繰り返すことで何とか済ました(本当か?)のですが、
まともなやり方を知りたくなりまして。
■ このスレッドは過去ログ倉庫に格納されています