正規表現 Part5
..
415:デフォルトの名無しさん
08/11/14 19:38:18
正規表現に通じている先輩は正に魔法のように正規表現を使ってあらゆるリクエストに解を提示している。
あんな人になるには一体どうすればいいんだろうか?
416:デフォルトの名無しさん
08/11/14 20:57:27
とりあえずふくろう本は読んだか?
417:デフォルトの名無しさん
08/11/14 21:46:38
やっぱりあのそこそこ分厚い青い本に挑戦したほうがいいみたいですね。TODOリストの一番上に上げときます。
418:デフォルトの名無しさん
08/11/14 23:15:54
正規表現って何なんだよ
表現に正規も糞もあるか!
419:デフォルトの名無しさん
08/11/14 23:20:45
正則表現という訳も、あるにはある。
420:デフォルトの名無しさん
08/11/15 00:25:47
「正規表現」という表現は、確かに適切でない。
では何が良いかといわれると、判らない。
明治時代の人々は、偉大だった。
421:デフォルトの名無しさん
08/11/15 02:38:54
regular expression を無理やり「正規表現」と訳しただけ。
アテ字と言って過言ではない。意味を深く考える必要は無い。
422:デフォルトの名無しさん
08/11/15 02:39:30
「帝王切開」 みたいなもんだな。
423:デフォルトの名無しさん
08/11/15 02:53:00
は?
424:デフォルトの名無しさん
08/11/15 02:54:53
洗濯を選択だな
425:デフォルトの名無しさん
08/11/15 13:49:35
何それ気になる
426:デフォルトの名無しさん
08/11/15 17:37:48
形式言語理論の分野では正則表現ともいう
まあ今時の言語で使えるような正規表現はもはや正則言語で表現できる範囲を
越えてたりするんだけどね
427:デフォルトの名無しさん
08/11/15 19:05:57
性器表現
428:デフォルトの名無しさん
08/11/15 22:00:13
モザイクやハレーションか。
「♪ヤッホー FORTRANランラン」並みに手垢が付いたネタだな。
429:デフォルトの名無しさん
08/11/15 22:07:24
>性器表現
>手垢が付いたネタ
つまりエロ本のことだな
430:デフォルトの名無しさん
08/11/16 14:47:16
よろしければ、お知恵をおかしいただきたいです。
"あるマックなどPCがあり、マックなどのコンピュータ"
の文字列から、/マックなどの?(.+)/のような正規表現で、「PCがあり、」「コンピュータ」の文字列を
取得したいのですが、うまくいきません。この場合、どのようにするのがよいのでしょうか?
よろしくお願いいたします。
431:デフォルトの名無しさん
08/11/16 18:58:39
>>430
環境を書け
432:デフォルトの名無しさん
08/11/16 19:46:20
環境を書けば答えられるの?
433:デフォルトの名無しさん
08/11/16 19:51:09
出来ない、というのも答えの一つだしな
434:デフォルトの名無しさん
08/11/16 20:14:40
>>431
430です。
Ruby 1.8.6、UTF8です。
お願いします。
435:デフォルトの名無しさん
08/11/16 20:18:42
>>431
ほら、質問者が環境書いたぜ。
「出来ない」 って答えろよ。
436:デフォルトの名無しさん
08/11/16 20:21:20
文字列を切り取りたいわけだろ?
文字列を切り取るには、何が必要だ?
どこから、どこまで。スタートとエンドだ。
/マックなどの?(.+)/
これにはスタートはあるが、エンドが無い。
どこまで切り取ればいいのか不明なんだよ。
どこから・・・マックなどの?
どこまで・・・ ←これを決めろ。
437:デフォルトの名無しさん
08/11/16 20:46:51
>>435
何なんお前
建設的なレスできないなら無駄なレスすんなよ
438:デフォルトの名無しさん
08/11/16 20:49:37
で?環境書けば出来るの?
439:デフォルトの名無しさん
08/11/16 20:51:20
うん
440:デフォルトの名無しさん
08/11/16 21:02:54
>>430
str = "あるマックなどPCがあり、マックなどのコンピュータ"
re = /あるマックなど(PCがあり)、マックなどの(コンピュータ)/
puts re.match(str).to_a[1..2]
441:デフォルトの名無しさん
08/11/16 21:13:42
↑↑
氏ね
442:デフォルトの名無しさん
08/11/17 08:23:20
次の マックなどの?(.+) もしくは行末までなんじゃないかな。
443:デフォルトの名無しさん
08/11/17 09:34:46
片仮名と平仮名の境目で切るのかな。
状態を持つ物なら、何らかのプログラミング言語を使わないと。
444:デフォルトの名無しさん
08/11/17 13:32:29
他人が勝手に仕様を決めていいのかよ
445:デフォルトの名無しさん
08/11/17 15:33:30
>>421
最初に訳した人が誰かは知らないが、regularの捉え方を間違えている。
正しいではなく、普通のと言う意味あいで(例:レギュラーガソリン)
汎則式とでもしておけば、初学者の違和感も起きないものを…
446:デフォルトの名無しさん
08/11/17 15:43:21
どうでもいいですよ
447:デフォルトの名無しさん
08/11/17 17:07:42
みんなチョムスキーが悪い
448:デフォルトの名無しさん
08/11/18 00:23:42
すみません。教えてください。
●正規表現の使用環境
サクラエディタ ver.1.6.2.0
●検索か置換か?
置換
●説明
フルパスが記述されたテキストファイルをとあるソフト(画像ビューアのHamana)のリストファイルにしたい
●対象データ
C:\Program Files\Windows Media Player\wmplayer.exe
●希望する結果
D=C:\Program Files\Windows Media Player\
F=wmplayer.exe
行末の直前の\を置換すればいいのかな?と思ったのですが
指定の仕方がわかりませんでした・・・
449:デフォルトの名無しさん
08/11/18 00:40:18
とりあえず
置換前:^(.*\\)(.*?)$
置換後:D=\1\r\nF=\2
450:デフォルトの名無しさん
08/11/18 01:03:03
>>449
ありがとうございました
451:デフォルトの名無しさん
08/11/18 12:09:47
<img width="120" height="180">
</img width="120" height="180">
<img width="120" height="180"/>
という文字列をすべて
width="120" height="180"
width="120" height="180"
width="120" height="180"
にしたいのですが秀丸の置換で
検索→.* (.*)[/>].*$
置換→\1
とやってるのですが
width="120" height="180"
width="120" height="180"
width="120" height="180"/
と、さいごのスラッシュが消えません。
是非助言をください!・・・もう何時間もやってるんです(汗
452:デフォルトの名無しさん
08/11/18 12:14:47
.* (.*?)[/>].*$
でいけました!お手数おかけしました!
453:デフォルトの名無しさん
08/11/20 09:31:33
とても大変だと思うのですが、よろしくお願いします。
●正規表現の使用環境
Windows上で動く「Perl5の正規表現と互換性のある」とマニュアルに書いてある
フリーの(今はシェアになっています)クリップボード拡張ソフト
マニュアルには、参考事例として
・複数行のテキストに含まれている空白記号をすべて削除する
[@ s/[ ¥t ]//gmk]
・複数行のテキストに引用記号をつける
[@ s/^/> /gmk]
などが書かれています。
●検索か置換か?
置き換え です。
●説明
窓の杜などからソフトウェアのファイルをダウンロードするときに、
そのソフトをレビューした記事のタイトルをダウンロード先フォルダの名前にしています。
しかし、記事からタイトルをコピーして、フォルダ名としてペーストするだけでは
「ファイル名には次の文字は使えません。」という警告をWindowsから受けてしまうことが頻繁にあります。
Windowsでフォルダ名に使えない文字を削除しつつ、無意味な連続する空行を削除し、
ペーストしただけでフォルダ名として使える文字列へと変換できる正規表現を考えていただけないでしょうか?
454:453
08/11/20 09:34:37
●対象データ1
「改行」
Moo0 オーディオ再生器「改行」
コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー「改行」
「改行」
for Windows「改行」
●希望する結果1 (フォルダ名に改行を使えないので、全ての改行をアンダースコアに置き換えつつ1行の文字列へ)
_Moo0 オーディオ再生器_コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー_for Windows
(先頭のアンダースコアはあってもなくても構いませんが、無い方がうれしいです)
●対象データ2
シンプルかつ高機能な音楽プレイヤー
foobar2000
バージョン【0.9.5.6】
●希望する結果2 (ここまでの変換に加え、連続する空白、TABをひとつのアンダースコアに置き換えつつ、さらに末尾の空白を削除)
シンプルかつ高機能な音楽プレイヤー_foobar2000_バージョン【0.9.5.6】
●対象データ3 (○アールはregistration symbolと呼ぶらしい丸の中のRなのですが、打てませんでした。)
1.
Intel○アール Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB)
14.36.4.5002 2008/10/24
●希望する結果3 (ここまでの変換に加え、registration symbolを(R)へ、フォルダ名に使えない文字/をハイフンへ)
1.Intel(R) Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB)_14.36.4.5002_2008-10-24
455:453
08/11/20 09:35:51
なお、Windowsでフォルダ名に使えない文字列は
\ / : , ; * ? " < > | および 改行
とのことなので、これらを含まない形へ整形できたらと思います。
これらを一度に処理することが、正規表現で可能なのかどうかも分からないのですが、
もし、できそうなら、どなたか編み出してもらえないでしょうか?
よろしくお願いします。
456:デフォルトの名無しさん
08/11/20 13:49:38
とりあえず、
s/[\\\/:,;*?"<>|]/_/g
みたいな。細かい改良点は自分で考えなよ。
457:デフォルトの名無しさん
08/11/23 00:32:05
………[2バイト文字][改行]
[2バイト文字]
↑このパターンを
………[2バイト文字][2バイト文字]
にするにはどう書けばよいでしょうか?
458:デフォルトの名無しさん
08/11/23 02:19:43
s/\n//
459:デフォルトの名無しさん
08/11/23 02:39:08
>>457
テンプレくらい読め。
それにそんだけじゃ情報が足りなすぎだ。
どうせ元データは何百行とあるんだろう?
どういう行とどういう行を連結したいのか位は明確にしろ。
460:デフォルトの名無しさん
08/11/26 05:14:10
●正規表現の使用環境
Devas 3.4
●検索か置換か?
置換
●説明
各行先頭にある
空白4つと数字(1から85)、ピリオドを抜き出したい
例えば
1. 120.136.16.13:3128
2. 94.178.64.37:48018
79. pps.nntime.com:554
このようなIP+Portの前にある文字列のことです。
●対象データ
1.
85.
461:デフォルトの名無しさん
08/11/26 05:28:19
^ *\d+\.
もし空白やドットが不要で通し番号だけ拾うのなら、
ツールにもよるけど ^ *(\d+)\. とか適当にアレンジして試しておくれ
462:デフォルトの名無しさん
08/11/26 06:36:22
>>460
それ、置換なの?
463:デフォルトの名無しさん
08/11/26 10:02:54
>>461
ありがとうございました!
^ *(\d+)\.
これでIPとPortだけに置換することができました。
464:デフォルトの名無しさん
08/11/27 15:26:32
よろしくお願いします。
●正規表現の使用環境
Flexible Renamer(Perl5互換)
●検索か置換か?
置換
●説明
ファイル名の一部を別の位置へ移したい。
●対象データ
(日付)(場所)hogehoge というフォルダ名や (日付)(場所)hogehoge,jpgというファイル名
●希望する結果
(日付)hogehoge(場所)や(日付)hogehoge(場所),jpgというようにしたい。
465:デフォルトの名無しさん
08/11/27 15:29:21
その日付や場所を特定するための法則は?
466:デフォルトの名無しさん
08/11/27 15:41:40
それぞれ 「()」 でくくってあります。ともに一緒の括弧だとまずかったりしますか?
467:デフォルトの名無しさん
08/11/27 15:56:36
ああ、その括弧は実際も括弧だったのねw
468:デフォルトの名無しさん
08/11/27 16:03:16
>>464
s/^(\(.+?\))(\(.+?\))(.+)(\..+)?$/$1$3$2$4/
469:デフォルトの名無しさん
08/11/27 16:43:45
ありがとうございます。
自分の悩んだ時間などウソのようにすっきり成功してしまいました。
今までも正規表現を使いたいと思って色々サイトを巡ったのですが
今回の答えも答えをもらって、見れば分かるぐらいの理解しかないのです。
良い学習サイトなどがあれば教えてくれませんか?それともオライリーの本を買うべき?
470:デフォルトの名無しさん
08/11/27 16:45:58
>>469
俺はこのスレでROMって勉強してる
471:デフォルトの名無しさん
08/11/27 16:47:49
とりあえずソフバンあたりで出してる入門書でもいいから
一冊読んだ方がその後が楽になる
472:デフォルトの名無しさん
08/11/27 17:29:37
>>468が理解できるのなら、正規表現の基本はできてる気がする。
(カッコのエスケープ、最短マッチ、後方参照あたり)
もしプログラミングの経験がなければ、そっちを補ったほうがいいと思う。
正規表現も一緒に学べる『初めてのPerl』『たのしいRuby』あたりお勧め。
リネーマーも自分で作れるよ。
473:デフォルトの名無しさん
08/11/27 17:49:46
おお、このスレの人は優しい人ばかりですね。
プログラムはPHPぐらいで、しかも正規表現がどうしても必要な場面に
遭遇した事がありません。
これからこのスレをROMったり、挙げてもらった本も入門書のようですので
探して見て勉強してみようと思います。
ありがとうございます。
474:デフォルトの名無しさん
08/11/29 10:49:00
■質問
2ch のレスの
>>***
を、テキストエディタを用いて
#aa(){{{>>***}}}
に置換したいのですが、方法はありますでしょうか?
475:デフォルトの名無しさん
08/11/29 10:56:30
>>*** のうち、どれが固定でどれが可変なのか区別がつかないと答えられない。
もし全部固定なら、そのままエディタの置換機能を使えば済む。
>>5を見て、対象データの例と希望する結果を書いてくれ。
476:デフォルトの名無しさん
08/11/29 12:56:55
>>475
ありがとうございます。わかりにくい表現で申し訳ありません。
↓が対象データの例と希望する結果です。
●対象データ
>>123
>>456
●希望する結果
#aa(){{{>>123}}}
#aa(){{{>>456}}}
477:デフォルトの名無しさん
08/11/29 13:01:41
>>476
検索 >>(\d+)
置換 #aa\(\)\{\{\{>>$1\}\}\}
478:デフォルトの名無しさん
08/11/29 13:18:38
置換後の文字列が↓のようになってしまいました。
$1 のところを \d+ や (\d+)、$\d+、$(\d+) に変えて色々やってみましたが
ダメでした。置換には EmEditor Pro 7.02 を使っていますが、
何かやり方が誤っているでしょうか?
#aa(){{{>>$1}}}
#aa(){{{>>$1}}}
479:デフォルトの名無しさん
08/11/29 13:37:14
それはソフトの使い方を読むか、サポートに聞け
480:デフォルトの名無しさん
08/11/29 14:31:04
>>478
後方参照を $1 ではなく \1 で行う
置換 #aa\(\)\{\{\{>>\1\}\}\}
481:デフォルトの名無しさん
08/11/29 14:49:18
>>480
お返事遅れました。
すっげwマジで出来たw 正規表現って本当にすごいですね。
自分は \t や \n 等、基本的なものしかわからなかったのですが、
今回の質問が非常に勉強になりました。
次に疑問が湧いた時には、正規表現でできないことはないという姿勢で
解決に望もうと思います。
ありがとうございました。
482:デフォルトの名無しさん
08/11/29 14:49:51
>>480
その括弧のエスケープはなんかいみあるの?
483:デフォルトの名無しさん
08/11/29 14:55:12
■追記
ちなみに、今回の置換の目的なのですが、
atwiki という wiki のページで
>
のような特殊文字を書くと、
適切に表示がされない不具合(?)があるので、
アスキーアート表示用のメソッド
#aa(){引数}
を用いて、> を囲みたいなと思ったのが目的でした。
初めは手動でやっていたのですが、あまりにも数が多いので
置換化できないかな、と思った次第です。
長文失礼いたしました。
484:480
08/11/29 15:01:52
置換文字列なので無いw
置換 #aa(){{{>>\1}}}
こうだね。 吊ってくる
485:デフォルトの名無しさん
08/11/29 16:21:23
>>482,484
小かっこ () って、正規表現モードでも \ をつける必要ないんですか。
勉強になりました
486:デフォルトの名無しさん
08/11/29 16:29:35
>>485
置換文字列は正規表現じゃないというだけ。
正規表現で書かなきゃいけないところで()そのものを書くには
エスケープする必要がある。
487:デフォルトの名無しさん
08/11/30 13:46:28
●正規表現の使用環境
.NET FrameworkのRegexクラス。
ですが、Perlなどの正規表現でもかまいません。
●検索か置換か?
検索です
●説明
エスケープ記号(\)がついていない括弧で囲まれた文字列の検索が目的です。
[^\\]\((?<content>[^\(]+[^\\])\)という正規表現で試したところ、
入力文字列"a(b)"で正しくマッチし"a\(b)"や"\(b)"で正しくマッチしないのですが、
"(b)"では本来マッチしてほしいのにできなくなります。
●対象データ
エスケープ文字がついてないカッコで囲まれた文字列
●希望する結果
マッチ: "a(b)", "(b)"
非マッチ: "\(b)", "a\(b\)", "a(b\)"
488:487
08/11/30 14:12:51
申し訳ありません。(^\(|[^\\]\()(?<content>[^\(]*[^\\])\)
で解決しました。
489:デフォルトの名無しさん
08/11/30 14:16:29
/(?<!\\)\((?<content>.*)?(?<!\\)\)/
490:デフォルトの名無しさん
08/12/03 17:36:22
aaa777 あああああ
aaa778ああああ
aaa7
aaa7あああ
aaa7aaa8
aaa7 aaa8
目的はaaa7をbbb7に置き換えたい。
しかしマッチ方法で苦しんでいます お助けを・・
/aaa7/ これでは全部置き換わる
/aaa7[^\d]/これでは 下の3つが余計な部分含めてマッチしてしまう。。
下から4つ、aaa7のみマッチさせる方法はあるでしょうか。
URLリンク(www.rider-n.sakura.ne.jp)
ここで簡単に調べられるのですが宜しくお願いします。
Perl互換の正規表現にチェックをいれていただけるといい感じです。
491:デフォルトの名無しさん
08/12/03 17:46:49
>>490
/aaa7(?=[^\d])/
次からは>>5でお願い。
492:デフォルトの名無しさん
08/12/03 17:48:08
aaa7(?=[^\d]|\Z)
そのチェッカーとやらの使い方がよくわからんので試してないが。
(?=ほげ) で先読みが、\Z で改行または文字列末にマッチ、ができることを
前提としている。
何を使っているのかよくわからないが(PHPのPerl互換モード?)
先読みと改行と文字列末の扱いを確認してみること。
493:デフォルトの名無しさん
08/12/03 17:50:47
よく考えたら /aaa7(?!\d)/ でよかった。
494:490
08/12/03 18:28:57
>>491
もうしわけないです次から気をつけます。
>>491-493
ふむふむ 先読みという事ができるのですね
結果うまくいきました!ありがとうございました。
先読みと改行と文字列末 これを詳しく勉強してみます。
495:デフォルトの名無しさん
08/12/03 18:31:18
よくそれだけで答えられるな
こう読んだけど違うのかな
s/aaa(?=7)/bbb/
>>494が来てたのでもういいみたいだけど
496:492
08/12/03 18:47:11
[^\d] は \D でよかったな。
>>495
aaa777 にもそれだとひっかかるよね?
それにはひっかけたくないらしかったから。
497:
08/12/05 00:09:56
()()
[][]
{}{}
498:デフォルトの名無しさん
08/12/06 21:09:48
ふらっとC#,C♯,C#(初心者用) Part34
スレリンク(tech板:607番)
から来ました
C#でRegexを使って正規表現を利用しています
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
Console.WriteLine("カンマあり");
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
マッチする場合は後で ((\w+\.?)+)$ の部分について処理をして、マッチしない場合はそのまま次にいくようにしたいのですが
このパターン文字列だと上記のような文字列でカンマが末尾にある場合はfalseが返ってくるまで異常に時間がかかってしまいます
最終的に ((\w+\.?)+)$ 出マッチする場合とと同じ文字列が得られる、末尾にカンマが合っても処理が遅くならないパターンがあれば教えてください
499:デフォルトの名無しさん
08/12/06 22:50:00
>>498
(\w+)+ みたいな感じになるから遅いんだろうねえ。
\s+\w+(\.\w+)*$
でどうか。
500:デフォルトの名無しさん
08/12/06 22:50:51
キャプチャするから
\s+(\w+(\.\w+)*)$
こうか。
501:498
08/12/06 23:56:46
>>499,500
ありがとうございます、見違えるように早くなりました
(\w+)*は良くても(\w+)+は遅くなるんですね
502:デフォルトの名無しさん
08/12/07 03:52:21
>>501
> (\w+)*は良くても(\w+)+は遅くなるんですね
んー、そういうことではないぞ。
\.? は有っても無くてもいいけど、(\.\w+)* の \. は必要でしょ。
(\.?\w+)* にしたらやっぱり遅くなるはず。
(\w+\.?)+ は「.xxxxxx」だけにも何通りもマッチの仕方があるけど、
(\.\w+)*は1通りしかマッチできない。この違いだよ。
503:498
08/12/07 10:07:49
>>502
? と +(もしくは*) の組み合わせが最悪だったわけですか
今度から注意します
504:デフォルトの名無しさん
08/12/07 13:53:02
>>503
なんかまだ誤解してるっぽいな。
*)*
みたいに、カッコの内側の最後に繰り返し指定(*やら+やら)があって、
その外側すぐにも繰り返しがあるのが問題(になることが多い)。
498が最初に書いたようなマッチしないデータを食わせたときに、
バックトラック回数がとんでもなくでかくなって遅くなる(可能性がある)。
505:498
08/12/07 15:05:16
>>504
理解が遅くてすみません、ようやく分かりました
丁寧にありがとうございました
506:デフォルトの名無しさん
08/12/07 20:39:26
正規表現が手に入れた強力すぎる「構文理解(マッチ)能力」って、
外国語の翻訳に使えそうな気がするんだけど、その観点での研究って進んでないの?
507:デフォルトの名無しさん
08/12/07 21:38:53
そりゃ無理でしょ。
yaccやbisonで実用になる翻訳ソフトが作れるって話は聞かないから。
508:デフォルトの名無しさん
08/12/07 21:53:34
>>506
正則言語はそんなに広いクラスじゃないぞ
509:デフォルトの名無しさん
08/12/07 21:56:51
>>506
一般の自然言語と正規言語では言語のクラスとして天と地ほどの差があるよ。
たとえば、多くの自然言語は無限回のネストを許容するが、これは正規文法で表せない。
510:デフォルトの名無しさん
08/12/08 08:03:55
お前らちゃんと日本語話せよ何言ってるか分かんねぇよ
511:デフォルトの名無しさん
08/12/08 11:28:01
お前が勉強不足なだけだ。
512:デフォルトの名無しさん
08/12/08 11:45:24
なんて面白みの無い、むしろマイナスなレスなんだ
513:デフォルトの名無しさん
08/12/09 18:38:31
●正規表現の使用環境
PHP4.4以降
●検索か置換か?
検索後、個々に置換
●説明
ユーザーが入力したhtmlデータ内に
特定の文字で囲まれたものを変換したい。
%test%や%nullpo%など。
●対象データ
フォームで送信されたhtmlデータ
<html>
<head>
</head>
<body>
%adv%
あいうえおかきくけこ<br>
%adv%
</bnody>
</html>
●希望する結果
%adv%を発見した位置を返し、それを指定された文字列で置換する。
%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
よろしくお願いします。
514:デフォルトの名無しさん
08/12/09 19:41:55
>>513
>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この時点で、正規表現でやるのには無理がある。
状態を持つには何らかのプログラミング言語で。
HTMLならJavaScriptか。
515:デフォルトの名無しさん
08/12/09 21:03:49
PHP使ってるからテンプレートエンジン使ったらどうだろうか
516:デフォルトの名無しさん
08/12/12 02:35:21
よくわかんないけど、%date%→2008/12/12 %name%→田中みたいにして
%name%様への%date%のお知らせです。
が
田中様への2008/12/12のお知らせです。みたいになるようにしたいんじゃないの?
正規表現っていうか普通に置換すればいいだけじゃないの?%name%→%date%とかなると置換順序によってはおかしくなるから、
そこは%name%を%date%で置換したいなら%%date%%と入力しといて後で%%を%に(ryみたいにすればいいと思うけど。
>>514は何が言いたいのか良くわからない。
>>515に同意。Smartyとか使えば全部やってくれるから楽だけど…
517:デフォルトの名無しさん
08/12/12 09:24:04
>>516
>%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。
この文章を素直に解釈すると、同じ「%adv%」でも状況に応じて
「こんにちは」にも「さようなら」にもなるって事じゃないのかな。
で、そういう状況依存的な内部状態を持つ操作は、
変数や条件判断文のあるプログラミング言語でないと不可能。
何か変?
518:506
08/12/13 22:59:58
>>507-509
正規表現の(現時点での)限界があることはわかりました。
が、自然言語の「(ある種の)典型的な表現」を滑らかに翻訳するという狭いクラスのタスクに対しては
正規表現がその強力な威力を発揮できると今でも思っています。
519:デフォルトの名無しさん
08/12/14 00:02:11
限界とか威力とか意味わかんね。
正規表現なんて正規文法を別の記号で書き直しただけじゃん。
数学的に厳密な定義のあるものなんだから、
明日になって威力が変わったりしないよ。
520:デフォルトの名無しさん
08/12/14 02:58:28
正規表現を、どんな夢でもかなえてくれる魔法の呪文とでも勘違いしてないか?
521:デフォルトの名無しさん
08/12/14 08:53:37
文法の表現力では
正規文法 < 文脈自由文法 < 文脈依存文法 < 解析表現文法
522:デフォルトの名無しさん
08/12/15 00:24:39
ABCを含まない行にマッチさせたい場合
^(?!.*ABC) ←OK
(?!.*ABC) ←NG
となるのでしょうか?
上記の違いが分かりません
523:デフォルトの名無しさん
08/12/15 00:38:48
>>522
.*がABCを食うから。
524:デフォルトの名無しさん
08/12/15 00:49:37
^があるとなぜ食えないんですか?
525:デフォルトの名無しさん
08/12/15 01:52:03
/^(?!.*ABC)/の場合、まず/^/が文字列の頭にマッチする。
そこから後ろ(即ち元の文字列全体)が、/^(.*ABC)/にマッチしなければ、全体としてマッチする。
/(?!.*ABC)/の場合は、どんな文字列であっても末尾にマッチする。
なぜなら文字列の末尾から後ろ(即ち空文字列)は/^(.*ABC)/にマッチしないから。
526:デフォルトの名無しさん
08/12/15 15:17:08
>>517
あーなるほどね。1回目の%adv%では「こんにちは」、2回目の%adv%では「さようなら」にしたい、とかか。
そりゃ正規表現じゃ無理だわ。いや、限定的な状況ならいけるかもしれないけど。
527:デフォルトの名無しさん
08/12/16 12:11:49
含まない行、のような指定は、できるなら -v オプションとか
正規表現より上のレイヤでやったほうがよい。
528:デフォルトの名無しさん
08/12/16 12:32:43
それはスレ違い
529:デフォルトの名無しさん
08/12/16 19:58:47
いいんじゃない?
正規表現だけでは何もできないんだから。
perl とか、テキストエディタとか、そのた言語と組み合わせないと。
530:デフォルトの名無しさん
08/12/16 22:12:40
perlとかテキストエディタとかその他の言語のサポートまではしてられないってことだろ。よう知らんけど。
531:デフォルトの名無しさん
08/12/17 01:43:09
>>527はどこまで正規表現を使うべきかという立派な正規表現ネタに見えた。
正規表現で実現可能なことは無理してでも正規表現を使え
なんていう愚かなスレでもないだろうw
532:デフォルトの名無しさん
08/12/17 09:10:18
実用的な解と、パズル的な解か。
533:デフォルトの名無しさん
08/12/22 14:32:23
例えば、 ABC と DEF という文字列があったとき、
ABCの場合
ABC (123)
DEFの場合
DEF (345)
という形に置き換えるのは可能でしょうか?
また、可能ならどのように書いたらいいでしょうか
534:デフォルトの名無しさん
08/12/22 14:53:58
>>533
できる。正規表現は
/ABC/
/DEF/
意地悪はさておき、ABCやDEFを検出するのは正規表現だけど
置換をするのはそれぞれの「実装言語や処理系ソフトウェア」だから
>>5のテンプレ埋めてくれないと答えられない。
535:533
08/12/22 15:54:12
すみません
訂正します
●正規表現の使用環境
Jane Style Version 3.01
●検索か置換か?
検索後に置換
●説明
文字列にマッチさせた後、マッチした文字列ごとに指定された文字列を後ろに
追加させて置換させたい
●対象データ
@ ABC
A DEF
●希望する結果
@ ABC (123)
A DEF (345)
536:デフォルトの名無しさん
08/12/22 16:25:00
普通の置換でよくね?
537:デフォルトの名無しさん
08/12/22 16:51:55
すみません、説明が足りませんでした
この二件だけの場合は二つ表現を書けばいいですが、
後ですぐに置換したい文字列を追加できるよう、(ABC|DEF)のように
orか何かでまとめて作りたいと思っています
それは可能でしょうか
それともやはり一つ一つ書いたほうがいいでしょうか
538:デフォルトの名無しさん
08/12/22 17:24:29
>>537
まとめようにも法則性が無いが。
539:デフォルトの名無しさん
08/12/22 17:27:44
てか、Jane Style って専ブラだよね?
どういう機能で何をしようとしてるのかがわからないとどうにもアドバイスのしようが...
(このスレは基本的には、grepやawkやPerlやPythonやJavaの正規表現のスレなので)
540:デフォルトの名無しさん
08/12/22 17:41:12
<rx2>(?<=ABC)[TAB] (123)[TAB]msg
<rx2>(?<=DEF)[TAB] (345)[TAB]msg
541:デフォルトの名無しさん
08/12/22 20:35:21
これですね。ちゃんと書いてあります。
URLリンク(www.monazilla.org)
542:デフォルトの名無しさん
08/12/22 21:36:27
>>538
あまり正規表現について詳しくないもので
やはりちょっと無理がありましたね・・・
>>539
すみません
少し勘違いをしていました
>>540
有難うございます!
すごくスッキリしていていいですね
参考にさせて頂きます
543:デフォルトの名無しさん
08/12/27 19:09:30
perl で
abc-def-1234-ghi-jkl
これから
abc-def
を取りたい
1234は数字が4文字です
1234の前を取るのはどうすればいいですか?
544:デフォルトの名無しさん
08/12/27 19:14:41
「取る」とは?
「抽出したい」 → 結果として abc-def が欲しい
「削除したい」 → 結果として -1234-ghi-jkl が欲しい
どっち?
できれば >>5 を参考に。
545:デフォルトの名無しさん
08/12/27 19:31:16
もっと高級言語っぽい表記で書けるといいのになぁ。
546:デフォルトの名無しさん
08/12/27 19:31:35
(ちょっと変えました)
prelで
●検索か置換か?
検索
●説明
12-34は数字が2文字ハイフン2文字です
(\d{2}-\d{2} こうかな?)
12-34の前を抽出するにはどうすればいいですか?
12-34の前の部分に数字が2文字は無いです。
●対象データ
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
●希望する結果
abc3-d5ef-
ho-1ge=+-e
547:デフォルトの名無しさん
08/12/27 20:59:42
>>546
12-34でもその一般化したパターンでも使ってマッチングさせてから
特殊変数 $` や@- を参照するなり他の手段で抜き出すなりすればよろしかろ?
548:デフォルトの名無しさん
08/12/27 23:26:09
>>546
カッコ ( ) をつかえばいいよ。
549:デフォルトの名無しさん
08/12/28 11:20:42
>>546
print /(.*)(?=\d{2}-\d{2})/ ? "match:[$1]\n" : "unmatch.\n" for qw(
abc3-d5ef-12-34-ghi-jkl
ho-1ge=+-e67-89+fuga++--jkl
);
550:デフォルトの名無しさん
09/01/01 12:55:59
単純にたくさんのテキストファイルから目当てのキーワードのある行を
正規表現で検索したい場合、Windows環境だとどのツールが便利・一般的なの?
秀丸かな?
Unixだとgrepコマンドがあるけど…
551:デフォルトの名無しさん
09/01/01 13:29:08
>>550
一般がどうかはしらないけど自分は秀丸やxyzzyの機能を使ってる
552:デフォルトの名無しさん
09/01/01 13:32:37
grepでいいよ
553:デフォルトの名無しさん
09/01/01 13:44:45
XP以降だと標準でfindstrコマンドがあるね
Cygwinを入れるのもいいし、各種テキストエディタに頼るのもいい
でも一番の検索ツールは、
| 何について調べますか?
| ┌──────┐
| | |
| | |
| └──────┘
| [ オプション(O) ] [ 検索(S) ]
|
`─────┐ ┌──
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
554:デフォルトの名無しさん
09/01/01 13:51:57
| 何について調べますか?
| ┌──────┐
| | おまいの消し方 |
| | |
| └──────┘
| [ オプション(O) ] [ 検索(S) ]
|
`─────┐ ┌──
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
555:550
09/01/01 14:13:35
さんくす、やっぱりそのへんかぁ。
556:551
09/01/01 14:17:19
このスレのせいで550がイルカの虜になってしまった
なんて親切なスレなんだ
557:553
09/01/01 14:17:59
名前間違えた、>>556は553
558:デフォルトの名無しさん
09/01/02 11:43:20
2007ではイルカ出なくなってるよね
559:デフォルトの名無しさん
09/01/02 11:46:47
冴子先生がいい
560:デフォルトの名無しさん
09/01/02 16:37:56
スターウォーズのジャージャービンクス
Office のイルカ
大ヒットメーカーが調子に乗りすぎて生み出してしまった
世界の2大うざキャラ。
561:デフォルトの名無しさん
09/01/02 17:31:36
なんかわかるw
562:デフォルトの名無しさん
09/01/08 11:11:00
perlで下のような場合にマッチさせたいのですが、どのようにすればいいのでしょうか?
<[a-z]+ lang="ja">.*?</[a-z]+>
最初の[a-z]+と最後の[a-z]+は同じタグを指定したいのですが、
このままだと、</a>や</b>といった終了タグが先に引っかかってしまい、
いびつな形でマッチしてしまいます。
563:デフォルトの名無しさん
09/01/08 17:22:05
>>562
正規表現一発じゃキツい
スキャナを書くか、素直にHTMLパーザ使った方が
564:デフォルトの名無しさん
09/01/08 17:36:17
>>562
バックリファレンスかな
<([a-z]+) lang="ja">.*?</\1>
こんな感じで
565:デフォルトの名無しさん
09/01/08 17:36:39
単純にそういう条件だと\1使えばいいんじゃ? いろいろやるつもりなら
結局パーサ使った方が楽ってことになりそうだけどね。
$s = q{<hoge lang="ja"><a>hogehoge</a><b>hoge</b></hoge>};
print $& if $s =~ m{<([a-z]+) lang="ja">.*?</\1>};
566:デフォルトの名無しさん
09/01/08 17:54:09
>>564-565
> <([a-z]+) lang="ja">.*?</\1>
でうまくいきました。
残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ…
目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、
今回はこれで十分です。
XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が
されていて途方にくれていました。
567:デフォルトの名無しさん
09/01/08 18:39:02
たとえば <xxx lang="ja"><xxx>foobar</xxx></xxx> というときにちゃんと取り出せないねえ
本当にちゃんとやろうとしたら正規表現だと無理だな
568:デフォルトの名無しさん
09/01/10 12:59:56
XMLは文脈自由文法だからPCREの拡張とか使わないと無理
569:デフォルトの名無しさん
09/01/14 15:34:24
Perlなら再帰的なやつもイケる
ちゃんとチェックしとらんが
local our@A;
my$a="jjj<unko>an<unko>hoge</unko>gf</unko>";
local our$b=qr{(.*?(<unko>(??{$b})</unko>)(?{push@A,$2}))*.*?};
$a=~$b;
print join($/,@A),$/;
570:デフォルトの名無しさん
09/01/20 13:53:47
正規表現のライブラリを自作してるのですが参考になるサイトはないでしょうか。
容易な拡張性を確保するためにオブジェクト指向を使って実装してます。
例えば
inputstr[k] == pattern[k] ?
ではなくて
pattern.can_eat(inputstr[k])
のようなpatternをレシーバ(インスタンス)としたかんじです。
現在はグループの中にグループがあるとどうやって解決するか悩んでいます。
(ab(cd|ef)gh)
などで、一応JAVAで実験してます。
571:デフォルトの名無しさん
09/01/20 13:59:04
pattern.can_eat(inputstr[k]) ?
pattern.contains(inputstr[k]) ?
などでboolean関数です。
性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。
構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。
572:デフォルトの名無しさん
09/01/20 14:04:39
他の言語の正規表現APIは参考にしてる?
OOならJava, Ruby, Python, .NETとあると思うけど
573:デフォルトの名無しさん
09/01/21 01:14:50
あれ?反応ないですね。
オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・
多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。
574:デフォルトの名無しさん
09/01/21 01:28:45
何をしたいのかが伝わってないんだろう。
読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの
かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス
ルー。
575:デフォルトの名無しさん
09/01/21 02:07:17
もっぱら使う側が多いからじゃないのかな。特に不満もないし。。
鬼車のポジションを奪える可能性もあるからがんばって!
576:デフォルトの名無しさん
09/01/21 02:37:56
参考になるサイトもないでどうやって頑張るんだよ!
3日ぐらい悩んで大体めどがたってきたから別にいいけど。
577:デフォルトの名無しさん
09/01/21 07:29:45
要するにこういうことだろ。
いずれにしても、パターンの構文木()笑を作る必要はあるよ
/(ab(cd|ef)gh)/.match("xabefgh")
/ab(cd|ef)gh/.match("xabefgh")
/ab/.match("xabefgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
/(cd|ef)gh/.match("efgh")
578:デフォルトの名無しさん
09/01/21 07:29:58
途中で書き込んでしもた。めんどくせ
579:デフォルトの名無しさん
09/01/22 11:45:20
●正規表現の使用環境
prel
●検索か置換か?
置換
●説明
特定タグ間のHTMLタグを全て削除する
(<body>から</body>までのタグを全て削除)
●対象データ
<html>
<body>
テスト<BR>
<b>です。</b>
</body>
</html>
●希望する結果
<html>
<body>
テスト
です。
</body>
</html>
580:デフォルトの名無しさん
09/01/22 13:41:18
>>579
$html =~ s{(?<=<body>).+(?=</body>)} {
(my $body = $&) =~ s/<.+?>//gs;
$body;
}es;
581:デフォルトの名無しさん
09/01/22 14:08:55
>>579 のおかげで prel でぐぐっても perl が検索対象になることを知った
582:581
09/01/22 14:11:05
ごめん、正確には
prel 正規表現
など prel と何か別のキーワードでぐぐったとき prel は perl とみなされるっぽい
583:デフォルトの名無しさん
09/01/22 16:40:10
ワロタ
584:デフォルトの名無しさん
09/01/24 10:40:12
余談になるけど、VBSの正規表現は、処理系の実務にも耐えられるくらいの機能は持ってるよ。
条件判定としての正規表現を使える事は、VBAユーザーにとってこれ以上無いほどのメリットだと思ってる。
俺もそんなに正規表現は詳しくはないけど、エクセルで使う目的を考えると、VBSの正規表現は非常に使い勝手が良い。
良くも悪くもシンプルなんだよね。
仕事で文字列操作やRDBみたいな使い方してる人ならば、絶対に覚えておいて損はないよ。
後方参照が表現できるようになって、世界が開けました。
どうでも良い話かもしれないけど、マジでお勧め。
585:デフォルトの名無しさん
09/01/24 10:40:37
誤爆しました。すいません。
586:デフォルトの名無しさん
09/01/27 23:36:14
文字列の中から名前を取り出したいのですがどうやって書けば良いでしょうか
587:デフォルトの名無しさん
09/01/28 00:08:31
「名前」の定義は?
環境も。
588:586
09/01/28 00:46:35
名前は人名です
環境はVB.NETです。
589:デフォルトの名無しさん
09/01/28 00:51:34
人名の定義は?
590:デフォルトの名無しさん
09/01/28 00:56:14
それを聞いてる
591:479
09/01/28 03:07:22
形態素解析の領分だろうね。
どこまで固有人名を解析できるかは性能と元の文章次第だけど。
592:デフォルトの名無しさん
09/01/28 03:07:56
すまん、名前消したつもりが残ってた
593:デフォルトの名無しさん
09/01/28 06:56:44
辞書も必要だな
594:デフォルトの名無しさん
09/01/28 10:19:24
形態素解析までしなくても、日本全国の苗字と名前のテーブルを作って
「苗字+名前」で引っこ抜けばいいと思う
595:デフォルトの名無しさん
09/01/28 10:37:13
「あや」と「あやの」みたいのをどう
扱うかとか考え出すとなにげに難しい
596:デフォルトの名無しさん
09/01/28 11:34:07
英語と違って日本語は「わかち書き」をしないから難しいやろね。
597:デフォルトの名無しさん
09/01/28 18:51:36
(鈴木|佐藤|山田| ... )\s*(太郎|花子| ... )
598:デフォルトの名無しさん
09/01/28 19:16:08
>>586よ、別に煽って遊んでる訳じゃないぞ。
コンピュータにとって、言うは易いが行うは難しい要求なんだ。
599:586
09/01/29 01:12:20
レスありがとう
では郵便番号か都|道|府|県|市|区|町|村のある行から
5行以内にある行で、末尾に。や、のない7文字以内の行で
その行の中には、も。もない文字列
これを抜き取ったら名前の可能性が高そうなのですが
どうやって書けば良いでしょうか
600:デフォルトの名無しさん
09/01/29 01:52:27
>>599
それは非常に喜ばしいけれど、名前じゃないものが抽出されたり、名前が抽出されなかった時に
どうするか考えてるの?
そのデータをどうやって作ってるのかよくわからんが、ごちゃごちゃしたテキストしか存在しないの?
601:デフォルトの名無しさん
09/01/29 01:57:10
人名で7文字制限つけていいのかなぁ。外国人名なんか来た日にゃえらいことになりそうだが。
602:デフォルトの名無しさん
09/01/29 09:57:27
>>599
正規表現ってのは、
人間が生活しながら身に付ける区別みたいに複雑な物じゃなく、
字面だけで機械的に振り分けする物。
それが可能なデータでないなら、正規表現での抽出は諦めた方がいい。
既存のデータなら仕方ないけど、何等かの方法で生成してる物なら、
その上流で手を打たないと難しい。
603:586
09/01/29 22:51:11
レスどうもです
たくさんのデータを一気に処理をするという感じではないので
失敗したら手動で訂正するので大丈夫です。
ちょっと補助的に便利になればという感じで
100件やったら半分でも正常に抽出できればそれでもOKです。
今↓のように書いてみましたがこれだと
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
東京都**区**町10-10
03-0000-0000
日本太郎
123-0001
上の2つは大丈夫なのですが、
日本太郎
123-0001
東京都**区**町10-10
03-0000-0000
だと抽出できなかったのですが、どこを訂正したらいいでしょうか?
r = New Regex("((\d\d\d\-?\d\d\d\d|都|道|府|県)+?.+\n)*?(.*\n{1,5}?)(?<1>.{4,8})$\n.+?(\d\d\d\-?\d\d\d\d|都|道|府|県)*?\n?", _
RegexOptions.Multiline Or RegexOptions.IgnoreCase)
よろしくお願いします。
604:デフォルトの名無しさん
09/01/29 23:15:33
うざいので他所言ってください
605:デフォルトの名無しさん
09/01/29 23:33:20
>>603
パターンが一定ではないので無理。
606:デフォルトの名無しさん
09/01/29 23:35:34
とりあえず、「住所は必ず数字で終わる」のなら、
^(\D+)\d
で引っ掛けられそうか。
607:デフォルトの名無しさん
09/01/29 23:36:39
>>603
人名なんて住所より短いんだから、行頭から全角6文字以内+行末文字の抽出で十分じゃない。
はい終了。
608:デフォルトの名無しさん
09/01/29 23:43:23
まあそれでも半分ぐらいは抽出できそうだわな
609:586
09/01/30 00:02:42
こんにちは
とかが頭にある場合があるので郵便番号と都道府県のチェックは外せないです。
610:デフォルトの名無しさん
09/01/30 00:07:35
ネタじゃないの?
611:デフォルトの名無しさん
09/01/30 00:10:28
データごとの固まりは空行で区切られてたり
行数が決まってたりすんの?
それだったら名前候補を抽出するプログラムも結構簡単に作れそうだが
全部正規表現でやるのは逆にむずそう
612:デフォルトの名無しさん
09/01/30 00:13:59
>>609
そのレベルになってくると、正規表現よりそれを扱うスクリプトの方でどうにかしたほうがいいのでは
そもそもどういう形式のデータかも想像できないし
613:586
09/01/30 00:16:01
ネタじゃないです
データは一つはj一人のデータです。
複数の人の切り分けは考慮する必要なないです。
やっぱ難しいですかね
614:デフォルトの名無しさん
09/01/30 00:25:56
>>613
いやもう本気で「日本語でおk」
どんなデータか説明してもらわないと、どうもこうも無いわ。
615:586
09/01/30 00:44:15
わかりにくくてすみません。
自由なフォーマットで送られてくる住所氏名電話番号を
ListViewに登録するということをやっています。
文章は
こんにちは
私の住所は
123-0001
東京都**区**町10-10
日本太郎
03-0000-0000
です
お返事ください。
こんな感じの文章から名前を出来るだけ高確率で取り出したいです。
段階に分けて調べた方がいいですかね
上の例だとまず郵便番号と都道府県と電話番号の位置を正規表現で探して
それらに一番近い7文字の全角句読点なしを取るという感じでどうでしょうか
「です」が怪しいですね「になります」とか書いてあったら間違うし・・・
616:デフォルトの名無しさん
09/01/30 01:00:30
>>615
> 自由なフォーマットで
って時点で、正規表現の領域じゃないと思うぞ。
617:デフォルトの名無しさん
09/01/30 01:01:54
自由なフォーマットなのか、郵便番号に近いのと電話番号に近い奴が違った場合どっちを取る?
とか問題があるな。
URLリンク(www2s.biglobe.ne.jp)
この辺から苗字のリスト拾ってきてそれが含まれてる行を抽出するとかでいんじゃね?
618:デフォルトの名無しさん
09/01/30 01:08:18
人名辞書と突合せしないと絶対に無理だろ
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4804日前に更新/194 KB
担当:undef