トップページ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さん辺りが書いてくれるカモ・・・・
0713218-228-157-71.eonet.ne.jp02/10/14 17:53ID:u7YCuldt
(;´Д`)ハァハァ
0714nobodyさん02/10/14 18:26ID:???
ここはCGIの話をするところではありません。
>>709->>712は早急に立ち退いてください。
0715nobodyさん02/10/14 19:00ID:???
はい、次々ぃ!

与えられた文字の並びの中から、
UUENCODEでファイルの記述になっている部分【だけ】を
正規表現でネグるやり方はありますか?

これ、テキストメールでOEユーザあたり宛に、ファイル送るときに
便利ですが。フィルターするならどうします?

掲示板に投稿されたテキストが、まんま、掲示板管理者に送信される
ケースで、事故が発生したことがあります。ちなみにOTDの掲示板で。
今は対処済みのようなんですが、いったいどうやったんだろうと不思議で。

0716nobodyさん02/10/14 19:21ID:???
>>715
「UUENCODEでファイルの記述になっている部分【だけ】を」
日本語がはっきりしませんが、uuencodeされた部分は、beginn
とendで境界付けられています。
0717nobodyさん02/10/14 23:51ID:???
1.undef $/;$while_lines=<>;
2.@lines=<>;
perlを1.2.のような使い方で
a
b
c
d

a\tb
c\td
にするにはどのように書けばいいでしょうか。
s/\n/\t/;
と書く場合、
置換される回数を指定できればやりたいことが実現できるのですが、
そういう手段perlはs演算子に用意されていないと思います。

他の手段でも構わないので、何かアドバイスありませんか?

0718nobodyさん02/10/15 00:00ID:???
s/\n(.*\n)/\t$1/g;
0719nobodyさん02/10/15 00:13ID:???
>>717
undef $/;
$line=<>;
$line =~ s/((.+?)\n(.+?\n))/$2\t$3/g;
print $line;
072071902/10/15 00:16ID:???
>>718の方がおり降参でした。

072171902/10/15 00:35ID:???
でも、漏れだったら、
while(<>) {
chomp;
if ($. % 2) {
print $_, "\t";
} else {
print $_, "\n";
}
}
かなぁ。
0722nobodyさん02/10/15 00:48ID:???
>>721
しょぼいコードだな
072371902/10/15 00:59ID:???
じょぼくて悪かったな。
実は自分でもしょぼいなぁと、>>717はいい質問してくれたなぁと。
072471702/10/15 01:52ID:???
あ、実は
a b c
d e f
g h i
j k l
とかも作る必要があったので、721のものが一番
良かったかも。

汎用性?
072571902/10/15 02:04ID:???
>>724
あんた優しいね。好きっ
0726nobodyさん02/10/15 02:53ID:epeKbC4J
携帯アドレスはハネない程度に厳しいメアド判定教えて!
0727nobodyさん02/10/15 03:22ID:???
@以下のアドレスに対して、whois
072872602/10/15 10:55ID:Hi0tGOTs
>>727
正規表現のみでひとつ
0729nobodyさん02/10/15 11:00ID:LkwD4Abx
>>726
/[-_.a-zA-Z0-9]+@(?:[-a-zA-Z0-9]+\.)?[-a-zA-Z0-9]{3,63}\.(?:[a-z]{2,}\.[a-z]{2}|[a-z]{2,})/
0730nobodyさん02/10/15 12:28ID:???
誰っかー。助けてください。
某サイトでお願いして書いてもらったソースコードを実行するたびに、
掲示板が勝手に改行いれるので、それを消し去る正規表現を書きたいです!!!

規則は:
1.全ての行は本来ならスペースやタブで始まる
2.勝手に改行されていた行は先頭(^)から始まる
3.本来なら、各行の先頭は大文字である
4.勝手に改行されていた行は先頭が小文字である

ぐらいかな〜。


具体例:
    Cells.Find(What:="場所", After:=ActiveCell, LookIn:=xlValues, Look
At:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchC
ase:=False) _
.Activate
のような感じです。お願いしました。
073173002/10/15 12:30ID:???
あ、
3.本来なら、各行の先頭は大文字である
4.勝手に改行されていた行は先頭が小文字である
には例外があるみたいです。

御願いしましたよ。
0732nobodyさん02/10/15 14:22ID:???
*は全て半角数字です。「-」は文字としてのハイフンです。
文字のパターンは、
1:****** # 文字数未定の1文字以上の半角数字
2:***-*** または、 ***-***-***  # 文字数は未定の数字のあとにハイフンが入ります。
ハイフンは1個の時と、2個付くときがあります。

例)12344556 、 32-98 、 45-98-35

これらの正規表現をお願いします。
自分で考えたのは
([0-9]+[[\-[0-9]+]?[\-[0-9]+]?) これです。
一応成功するんですが、**-**-**-** こうやっていくつも続いた時も
マッチしてしまいます。基本的に**-**-**という風に三回しか繰り返しません。
修正があればお願いします。
0733nobodyさん02/10/15 14:26ID:???
すいません、正しいのはこれです。
([0-9]+[\-[0-9]+]?[\-[0-9]+]?)/mg)
0734nobodyさん02/10/15 14:29ID:???
/^(?:\d+-){0,2}\d+$/;
0735nobodyさん02/10/15 19:18ID:???
>>715
$in{$_} =~ s/^begin 0{0,1}[0-9]{3} (?:(?!\nend).)*(\nend)/UUENCODED-BINARY/gs;
$in{$_} =~ s/\nbegin 0{0,1}[0-9]{3} (?:(?!\nend).)*(\nend)/\nUUENCODED-BINARY/gs;

うちではこうだけど。でも取り除き漏れがあるかな?うぅーん。
073672602/10/16 21:41ID:lp+sZlkX
>>729
ありがとう
0737nobodyさん02/10/17 02:55ID:???
sage
0738nobodyさん02/10/18 23:47ID:???
正規表現で、
日本語のひらがな一文字だけマッチさせるのって出来るのですか?
0739nobodyさん02/10/18 23:51ID:???
でっ、できちゃう
0740nobodyちゃん02/10/19 01:06ID:???
>>738
jperlなら、[ぁ-ん]
perlなら、sjisの場合、\x82[9F-F1]、
eucの場合、A4[A1-F3]、jisの場合、24[21-73]、utf8の場合、30[41-93]

0741nobodyちゃん02/10/19 01:08ID:???
おや、16進数を表す記号を付け忘れたし。
perlなら、sjisの場合、\x82[\x9F-\xF1]、
eucの場合、\xA4[\xA1-\xF3]、jisの場合、\x24[\x21-\x73]、
utf8の場合、\x30[\x41-\x93]
0742nobodyさん02/10/19 13:03ID:???
ココ見てる人なら、知ってるかも。

HTMLの<TABLE>〜</TABLE>をCSVとかTSVとかに変換できますか?

table2csv.pl
なんてのがあるわけがないと思って質問シマスタ。
w3m -dump はへんな線が入るので、使いたくないし、CSVが勝つよう範囲も
広そうなので、だれか書いていてもよさそう。


とっても困ってます。

0743738 02/10/19 13:16ID:???
>>740

perl(jperl and perl5.8)の
s/あ/ア/;
tr/あ/ア/;
の違いってわかりますか?

たぶん、知ってそうだから。ごめんね。
074474202/10/19 13:36ID:???
http://www2.crl.go.jp/jt/jt221/tfujii/Installer/table2csv.txt
になんかそれっぽいものあるけど
動かない。

理由わかる人いますか?
0745nobodyさん02/10/19 14:01ID:???
>>744
こりゃあ、ひどいな・・・
0746nobodyさん02/10/19 15:15ID:???
>>744



ほれ。区切りはawkだから-F","とかね。


BEGIN { print "<table border=\"1\">";}

{
print "<tr>";
for (i=1; i<=NF; ++i){
gsub(/&/,"\\&",$i);
gsub(/</,"\\<",$i);
gsub(/>/,"\\>",$i);
print "<td>" $i "</td>";
}
print "</tr>\n";
}

END { print "</table>";}
0747744 02/10/19 17:19ID:???
>>746
csv2table.awkではなく
table2csv.awk

が欲しいのです。

074874402/10/19 18:08ID:???
どれくらいのテーブル? どでかいの?
074974402/10/19 18:39ID:???
ちっちゃいですよ。すごく。
0750nobodyさん02/10/19 18:44ID:???
>>744
ファイルから読み込むならまず最初に全部変数に読み込め
0751nobodyさん02/10/19 21:52ID:???
>>742
colspanとrowspanが指定されてるのってどうするかとか、
仕様が決まれば、すぐ書けるよ。特にrowspanね。
caption、thead、tfootどうするかは、たいした問題じゃ
ないな。
libraryやmoduleがないのは、余りにも簡単だからだよ。
perl初心者コーナーで質問したら書いてくれる人いっぱい
いたのにぃ。
0752nobodyさん02/10/19 22:08ID:???
>>751
colspan や rowspan があるテーブルはどうやってCSV変換するんだ?
0753nobodyさん02/10/20 11:10ID:???

例えば、
┌─┬─────┬─────┐
│ │  人間  │  猿  │
│ ├──┬──┼──┬──┤
│ │ 男 │ 女 │オス│メス│
├─┼──┼──┼──┼──┤
│x │ 1.9│ 2.3│ 1.3│ 1.8│
├─┼──┼──┼──┼──┤
│y │ 0.8│ 0.4│ 0.4│ 0.2│
└─┴──┴──┴──┴──┘
だったら、
"," (row: 2)","人間 (cols: 2)","人間 (cols: 2)","猿 (cols: 2)","猿 (cols: 2)","
"," (row: 2)","男","女","オス","メス","
","x","1.9","2.3","1.3","1.8","
","y","0.8","0.4","0.4","0.2","
こんなふうにするスクリプト。改行多くて1レスにならんから、次レスへ。
0754nobodyさん02/10/20 11:10ID:???
>>753の続き
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;
}
しっかり試してないからバグが潜んでいるかも。
0755nobodyさん02/10/20 20:19ID:???
>>744, >>752
せっかく求めに応じて書いたのに。何の反応もない。
2chだってある種の礼儀はあるだろうに。
075674402/10/20 22:50ID:???
>>753
おおおお、そんな複雑なことまで出来るのですね。
ほんとに有難うございました!!!
勉強になりました。

今、http://hywr.kuciv.kyoto-u.ac.jp/~shiiba/documents/unix/openmemo.html#3
のtabel.elなるものを見つけましたが、スクリプト自体は落とせませんでした。

以前これを落とされた方いますか?


0757nobodyさん02/10/21 00:26ID:???
>>756
「勉強になりました」とか言ってほんとはありがた迷惑ってやつだろ?
だって使えそうにないもんな
0758nobodyさん02/10/21 01:02ID:???
>>757
どこがどう使えないか言ってみろ。
0759nobodyさん02/10/21 12:36ID:???
$line =~ s/(<\/*thead>|<\/*tfoot>)//gi;

テーブルにこんなタグあんのか?
0760nobodyさん02/10/21 12:47ID:???
書いた本人じゃなくて悪いけどさ、
>>759
あるぞぉ。

ちなみに、tr/th/tdタグって閉じなくてもいいわけだから、汎用的に使う場合に
はちょっと問題出そうな気がするんだけども。
0761 ◆hMJAPH9PWA 02/10/21 12:49ID:???
>>759
あるよ。あとtbodyね。省略可能だからあまり見ないのかも。
0762nobodyさん02/10/21 13:17ID:???
>>754
そのコードは無限ループに陥る可能性が・・・
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:???
>>760
おっとうっかりしてた。
</*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:???
>>717
乗り遅れたが...

while(<>){
s/(.*?)[\r\n]*$/$1."\t".<>/es;
print;
}

ってのはどう?
0767nobodyさん02/10/21 23:29ID:pPxXD5oZ
恐ろしく厨な質問で恐縮なのですが・・・
一文字前が改行以外の「,」を検索することは
正規表現で出来るのでしょうか?
VBScriptの正規表現オブジェクトを使ってます。
[^\t\n],
だと改行が前に無い「,」とその一個前が取れてしまって・・・。
重ね重ね厨ですみません。。
0768nobodyさん02/10/21 23:31ID:???
あ、上の [^\r\n], です。すみません・・・。(鬱
0769主婦のサークルで〜す02/10/21 23:55ID:Ah6hwMht
ほんの少し刺激を求めてる主婦のサークルを作りました!
私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/
077076202/10/22 00:35ID:???
>>764
以下の2行のごく単純なテーブルで実行してみれば?

<table><tr><td
bgcolor="White">hoge</td></tr></table>

あと、念のために聞くけどCSVって知ってる?
0771nobodyさん02/10/22 02:45ID:???
>>766

これって改造して、3列バージョン作れますか?
0772nobodyさん02/10/22 05:13ID:???
>>764
ちゃんと人の書いてること読んでから書き込め。
<tr>...</tr>の行が1行ごとに改行されてるtableが前提だ。
前処理もすぐに書けるが書いてないといってる。
お前のおかげで貴重な資源が無駄になった。もう2chには来るな。
おまえはCSVに何種類かあるか知ってるのか?漏れの出したの何ていう
名前のCSV? Kで始まるよ。
そういうのが分かってる奴しか相手にしないからお前は早く氏ね。
0773nobodyさん02/10/22 05:14ID:xIeaXQaj
>>760じゃなくて>>770だった。
あまりアフォだから晒しアゲ

0774nobodyさん02/10/22 07:58ID:???
>>772
まーまーおちけつ。
故意にせよ抜けてたにせよ、問題を含んでるのは確かなんだから、
より実用的なコードに仕上げた方が建設的ってもんでないかい?
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:???
>>775
やっぱり、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=77802/10/22 14:13ID:???
>>779
あんたは喧嘩両成敗みたいなことやってるが、明らかに
悪いやつは、何の欠陥を指摘もできないで、漏れのスクリ
けち付けた>>757>>775
>>776は、すばーらしスクリをさらしてくれてありがd。
>>754はすばらーし」、だけでよかった。>>776も考えて
みりゃ、ネットのくずだ。早く逝け。


0781nobodyさん02/10/22 14:24ID:???
>>763 へのフォローは無しか。
そうやって熱くなって他の人間にまで迷惑を掛ける。
いくらお前から見て>>757>>775が悪でも、傍から見たら一括りにしてウザイんだよ。

そこんトコ分かってくれ。
0782754=77802/10/22 14:26ID:X4lK8otn
>>775は、糞DOSでやってるんじゃないか。
漏れは自宅の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:???
あ、781=779な。
0784754=77802/10/22 14:44ID:???
>>781
<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=77802/10/22 14:48ID:???
>>781
そうそう、sjisで日本語やってんなら、jperlにしたら、こいうこと
気にしなくていいんじゃない、って書こうと思ったんだ。
078677902/10/22 15:53ID:???
>>784
へぇ、>>763はHTMLの話なんだ。どこからその毒電波でたの?
>>785は同意だけど。

あと君のスクリプトサラッと見てみたけど、colspanとrowspanの2つとも指定されたtdを含む場合
(<td colspan="2" rowspan="2">ほげ</td>ってみたいなの)、問題あるような気がするけど。
0787754=77802/10/22 16:34ID:???
>>786
それは考えてませんでした。うすうす気づいてたけど。
そういうまともな批判を待ってました。ありがd。
<tr>...</tr>の途中で改行されてるデータと、solspan、rowspanが両方
指定されてるデータに対応したのを作ってみます。比較的すいてるので、
この前は上げたけど、不評なので、上げるかどうか分かりません。
0788nobodyさん02/10/22 17:48ID:???
" や , はエスケープしなくていいの?
0789nobodyさん02/10/22 17:53ID:???
・多分正常なHTMLならOK
・多分改行も関係ない
・多分バグある
・多分滅茶苦茶叩かれるw

http://homepage3.nifty.com/~moemoe/table2csv.pl.txt
0790nobodyさん02/10/22 17:54ID:???
>>788
いいよ。
0791nobodyさん02/10/22 18:30ID:???
>>789
いいねこれ。もらったぜサンキュー!
079278902/10/23 01:50ID:???
イイですか?
自分で書いといて何だがもっとコンパクトに書けそうな気がしたんで
添削キボンなんだが。
ってココまで行くと正規表現の範囲でも無いか。sage
0793754=77802/10/23 02:53ID:???
ここは正規道場だからね。漏れはほとんどスカラでやって正規表現の
使い方を示した。rowspanだけは難しかったので配列をつかっちゃった。
>>754は、10分か20分で作ったので、さっき改行とcolspan、rowspanに
対応したのを配列なんか使わずに書いたが・・・
Perlのスクリプトを競うのなら「スクリプト改造工房」、「Perl
初心者コーナー」あたりにどうぞ。


079477502/10/23 03:05ID:???
ええと、言いたかったのは
4 5 6
が2番目ではなくて最後になるってことで
区切りなんてどうでもよかったんでIEの表示結果を
コピペしただけだったんですが
0795754=77802/10/23 03:29ID:???
>>794
漏れの実行結果2回も貼り付けたが、なってないじゃん。
お前の実行結果を貼り付けてみる。捏造するのに時間かかるだろ。
0796754=77802/10/23 03:31ID:???
なるほど、そいうことか。また改造だ。あんがd。
0797nobodyさん02/10/23 10:13ID:???
激しくがいしゅつだと思うんですけど、メールアドレスの正規表現です。
perlメモを見ましたが初級者にはどう考えても理解できません。
別に理解しなくてもサブルーチンとして貼り付ければいいだけかもしれないんですが、
ある程度何をやっているかわからないとやっぱり気分が悪いです。
で、皆さんが普段利用しているメールアドレスチェック正規表現を教えていただければこれ幸いです。
0798ぶっちー02/10/23 10:36ID:IaWkOnQn
秀麻呂エディタで「1KG」とか「999KG」の数字3ケタでKG表示している
文字列を「 [999KG] 」のように[]で囲みたくて正規表現を使って置き換え
してるんですがうまくいきません・・・

「オレ様,男,25才,189cm,98KG,12%」
みたいなカンジでカンマで区切ってある行が2000行くらいです。
この中の体重部分だけを[]で囲みたいんデス(泣;
0799nobodyさん02/10/23 11:00ID:???
>>798
これはどうよ
$a =~ /,(\d*KG),/;
$a =~ s/(\d*KG)/[$1]/ig; 
080078902/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ってくる可能性があるので。
0801nobody02/10/23 11:23ID:???
>>798
正規表現道場だから、
s/((.*?,){4})(.*?),/$1\[$3\],/;
しかし、普通は、配列を使って、
split/,/;
print "$_[0],$_[1],$_[2],$_[3],[$_[4]],$_[5]";
0802ぶっちー02/10/23 11:34ID:IaWkOnQn
>>789サマ

神!できました!
どうもありがとうございましたヽ(´∀`)ノ

「タグ付き正規表現」ってヤツですね。
ま、それ知ってても自分でできたとは思えませんが・・・
0803ぶっちー02/10/23 11:41ID:IaWkOnQn
>>800サマ・・・でございました(汗;

>>798サマ
>>801サマ

PG上でのマッチングじゃなくて秀丸で成形してから
SQLに渡そうと腐心しておりマスタ。いずれにせよ
ソース上で有用な構文、ありがとうございました!
0804nobodyさん02/10/23 12:17ID:???
なんか自分の考えが正しいと思いこんで他人に押し付けるスレはここですか?
0805nobodyたん02/10/23 12:49ID:???
Email::Valid 使え。
と思ったり。

変に不完全なチェックするよりマシ。
0806nobodyさん02/10/23 13:28ID:???
>>804
お前のことか?
0807nobodyさん02/10/23 17:24ID:???
まあいくらチェックしてもhello@2ch.netとか貼られると
どうしようもないわけだが
0808nobodyさん02/10/23 17:57ID:???
汚染チェックだけしとけばいいって事ですか。
0809nobodyさん02/10/23 18:03ID:???
>>808
どうせだからそのドメインがホントにあるか&メル鯖はあるか迄見とけ。
0810nobodyさん02/10/23 20:28ID:???
「文字を含まない」→[^a]*
みたいに出来ますが、

「ある文字列を含まない」ってどうやるんですか?
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/);

じゃ問題あんの?
■ このスレッドは過去ログ倉庫に格納されています