正規表現 Part5
..
369:364
08/10/30 22:42:15
>>367-368
試してみました。コードの構成は以下の通りで、マウスクリックでのアクションです。
var str:String = "+ +-- ** / / 0120-123-456 1.2345 -0.1234 10.5678 0.0012"; //適当な文字列
this.expBtnM0.buttonMode = true;// マウスポインタを指の形に
this.expBtnM0.addEventListener (MouseEvent.CLICK, mcClick0);
// 5個のムービークリップ expBtnM0〜expBtnM4 を押して動作
function mcClick0 (event:MouseEvent):void {
var pattern:RegExp = /\x2E[0-9]/g; // <----- ここを5種類で試す
var regObj:Object = pattern.exec(str);
trace ("0 マッチング: " + regObj); // 0 マッチング: 〜 4 マッチング:
trace ("0 文字列: " + str.match(pattern)); // 0 文字列: 〜 4 文字列:
trace ("");
}
結果は、 var pattern:RegExp = /\x2E[0-9]/g; , var pattern:RegExp = /\.\d/g; ,
var pattern = new RegExp("[.][0-9]", "g"); および var pattern:RegExp = /[.][0-9]/g; の4つで可でしたが、
var pattern = new RegExp("\.\d", "g"); ではod が返されて不可でした(odの意味を調べましたが、
分かりませんでした)。
取りあえず、少数点(ドット)には var pattern:RegExp = /〜/; の形が良いようです。
アドバイス、有難うございました。
370:デフォルトの名無しさん
08/10/31 01:02:32
今北
最後のやつはダブルクォート中のエスケープだから実態は“.d”で
任意の1文字+dで解釈されたと思われる
それをするなら“\\.\\d”だろうか
どうも「\でエスケープ」の意図が伝わってなかった気がするね
できたんならよしとすればいいけど
371:デフォルトの名無しさん
08/10/31 06:50:23
だね。ややこしいところではある
// ASコンパイラは文字列「ドット、次に d 」と解釈
"\.\d"
// 正規表現コンパイラは文字列「ドット、次に d 」を元に正規表現を作成
// 結果、任意の一文字に続いてdが来る文字列にマッチする正規表現が出来上がる
new RegExp("\.\d", "g");
こういうのにはまったら、ASコンパイラと正規表現コンパイラの二者が
(概念的には)存在することを思い出すといいんじゃないかと思う
もちろん、とりあえず正規表現リテラル /.../ 使っとこう、でも構わない
あと >>369 のコード中の str に文字列 od が含まれていないか確認を
372:364
08/11/01 11:41:13
>>371
すいません、レス遅くなりました。
ここに貼った var str:String は元が長いので、途中を省略したもので、コード上の元の
文字列には確かに od が入っています。
AS3.0の new RegExp("\.\d", "g"); だと、od(〜d) が対象になるのかなあ・・・・
373:デフォルトの名無しさん
08/11/03 18:48:42
●正規表現の使用環境
PHP4.3.11
●検索か置換か?
検索
●説明
CSVファイルを「,」で分離したいが、
「"」で囲まれているフィールドに関しては「,」で分離したくない
●対象データ
AB,BC,"CD,DE,EF",FG
●希望する結果
(1)AB
(2)BC
(3)"CD,DE,EF"
(4)FG
すいません、基礎的な質問かと思いますが
お分かりになる方がいらしたらよろしくお願いいたします。
374:デフォルトの名無しさん
08/11/03 19:47:44
CSVの分割は正規表現では完璧に表現できない
プログラムで対処が一般的
375:デフォルトの名無しさん
08/11/03 21:01:42
>>373
PHPなら専用の関数が元からあるだろう?
376:デフォルトの名無しさん
08/11/03 21:31:19
●正規表現の使用環境
Ruby1.8
●検索か置換か?
置換
●説明
ファイル名の頭から指定の文字列Xまでをなくす
●対象データ
例)指定の文字列X → "test"
ドラゴンボールtestあいうえお.txt
あああいいいtest.txt
●希望する結果
testあいうえお.txt
test.txt
377:デフォルトの名無しさん
08/11/03 21:35:30
"aaaiiitest.txt".sub(/.*?test/, "test")
"aaaiiitest.txt".slice(/test.*/)
378:デフォルトの名無しさん
08/11/03 21:40:12
テラ早い回答ありがとうございました
379:デフォルトの名無しさん
08/11/08 09:49:48
●正規表現の使用環境
Perl v5.8.8
●検索か置換か?
検索
●説明
F1という文字列が含まれていたらヒットさせたい
ただしF1の前にFが付いている場合はヒットさせたくない
●希望する動作
"F1 ほげほげ" →真
"FF11 ほげほげ" →偽
[^F]F1
[^F]?F1
などと試して見ましたが失敗でした
380:デフォルトの名無しさん
08/11/08 10:11:16
自己解決
これでうまくいきました
^F1|[^F]F1
381:デフォルトの名無しさん
08/11/08 14:32:31
否定戻り読みとか使うのもいいだろう。
(?<!F)F1
382:デフォルトの名無しさん
08/11/08 14:36:05
CodeZineの記事オススメだなテンプレにいれとこうぜ
URLリンク(codezine.jp)
URLリンク(codezine.jp)
383:デフォルトの名無しさん
08/11/09 06:56:57
>>381
それは否定先読み
384:デフォルトの名無しさん
08/11/09 07:01:53
これ間違ってる?
(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
385:デフォルトの名無しさん
08/11/09 07:04:38
>>383は無かったことにしてくれ
386:デフォルトの名無しさん
08/11/10 09:18:59
●正規表現の使用環境
lex
●検索か置換か?
検索 ?
●説明
C言語のコメントで使われるような書式の検索
/*で始まり*/で終わるような文
ただし途中で*/は出現しない
漢字コードはEUCです。
コメントが英数字だけならできそうなのですが
漢字などが入ってくるとよくわかりません。
よろしくお願いします。
387:デフォルトの名無しさん
08/11/10 10:47:44
EUCなら、漢字がバラになっても英数字とコードが重複しないから
問題ないのでは?
388:デフォルトの名無しさん
08/11/10 11:20:03
>>387
できれば正規表現を教えてもらえないでしょうか?
英数字は[a-zA-Z0-9]のようにできると思いますが
ひらがなやカタカナは[あ-んア-ン]のようにはやはりできませんよね?
文字コードで書くのでしょうか。。。。
389:デフォルトの名無しさん
08/11/10 11:21:52
>>388
この場合、正規表現にひらがなやカタカナを書く必要ないでしょう?
390:デフォルトの名無しさん
08/11/10 11:40:01
>>389
コメント/**/の中にひらがなやカタカナ、漢字、英数字がでて来ると思うのですが
必要ないのでしょうか?
例として
「/*(A|***B)*/」
Aは「*、/」以外の文字を表しBは「/」以外の文字を表す。
演算の*と混乱をさけるためアスタリスクは全角大文字にしているが
実際は半角にする。
このAとBを表したいのですが。。。。
例えば[0-9a-zA-z(漢字コード?)^/*(/と*を除く)]のようにすればいいのでしょうか?
391:デフォルトの名無しさん
08/11/10 12:15:38
後出しで条件つけるなよ・・・
392:デフォルトの名無しさん
08/11/10 13:04:37
>>390
目的は、コメント中の「*」を「*」にすること?
393:デフォルトの名無しさん
08/11/10 13:19:29
>>391
すみません、質問の仕方が悪かったです;
>>392
いえ、「/*(A|***B)*/」の「*」は本当は「/*(A|xx*B)*/」
とかけてC言語ではかけるの「x」は「*」で、
正規表現の0回以上繰り返す「*」とかぶってしまうため
「/*(A|***B)*/」とかかないで「/*(A|***B)*/」と書いていると思います。
何がしたいのかはlexを使って字句解析をしたいのですが
コメントの部分をスルーするための正規表現の仕方がしりたいのです。
394:デフォルトの名無しさん
08/11/10 13:25:36
字句解析するなら /* と */ だけ検知して
途中は読み飛ばせばいいような気がするんだけど、そうじゃないの?
395:デフォルトの名無しさん
08/11/10 13:29:59
英数字なら出来そうとかのたまっているけど、まずはそれで実装してみりゃいいじゃんね。
それでEUCコードの部分で引っかかるようなら改良すればいい。
396:デフォルトの名無しさん
08/11/10 13:40:59
ダメだこりゃ
397:デフォルトの名無しさん
08/11/10 13:45:57
>>394 が正解。
コードで書くのは簡単なんだが、正規表現にするには独特のコツがいるという
タイプの問題なので、下手にこだわるよりさっくり問題そのものを別の方法で
解決してしまったほうが早い。
398:デフォルトの名無しさん
08/11/10 13:58:13
よく分からんが、最短マッチが使えないからどうしようって話か?
/* -> COMMENT状態に遷移
*/ -> 戻す
でいいんじゃね
399:デフォルトの名無しさん
08/11/10 14:03:53
>>394
/*と*/を検知するには
{^/*}{/*$}のような感じでいいのでしょうか?
行が複数行になったらおかしくなりませんんかね。。。。。
400:デフォルトの名無しさん
08/11/10 14:28:50
ん、あれ?
別の板の正規表現スレで似た話があったから、その続きかと思った。
量指定子を+と*で書くと、
/*([^*]|*+[^/*])**+/
となる。
401:デフォルトの名無しさん
08/11/10 15:03:37
>>400
回答ありがとうです<(_ _)>
よく考えて見ます。。
ちなみにマルチはしていません@@
402:デフォルトの名無しさん
08/11/10 22:36:25
コンパイラコンパイラで使用できる正規表現というかEBNFは、しょぼくて、マルチバイト
対応するの大変だから生成されたパーサだけ使用して、スキャナは自前実装がお勧め。
403:デフォルトの名無しさん
08/11/11 04:08:42
●正規表現の使用環境
Excel & 正規表現検索
※ URLリンク(srcedit.pekori.jp)
●検索か置換か?
置換
●説明
英単語のみ先頭文字を小文字化
●対象データ
One
Two
Three3
●希望する結果
one
^
two
^
Three3
^^^^^^^
○自分の経緯
検索:(^[a-z])([a-z]*)
置換:[LOWER]$1$2
結果:One ⇒ [LOWER]One
○知りたいこと
このアドインにある「特殊置換」を利用する際の文法
以上、お願いいたします。
404:デフォルトの名無しさん
08/11/11 10:08:45
おれなら Excel をデスクトップの「ごみ箱」へD&Dする
405:デフォルトの名無しさん
08/11/11 18:18:15
コントロールパネルからアンインストールしないと意味ないって警告出るだろ。
406:デフォルトの名無しさん
08/11/12 05:26:09
mmMMamUUqpndbback
407:403
08/11/12 05:43:22
それができたら、どんなに楽か・・・
408:デフォルトの名無しさん
08/11/12 20:14:38
とりあえずこのスレ>>1-10まで流し見て全く理解できなかった
もう一度読んでみるのが怖い
409:デフォルトの名無しさん
08/11/12 20:43:19
>>403
特殊置換は変換後にそれだけしか書けないんじゃない?
とりあえず変換するだけなら↓でいけないか
変換前:^[a-z]+$
変換後:[LOWER]
410:デフォルトの名無しさん
08/11/13 00:28:30
検索:A([a-z]*) 置換:a$1
検索:B([a-z]*) 置換:b$1
検索:C([a-z]*) 置換:c$1
検索:D([a-z]*) 置換:d$1
検索:E([a-z]*) 置換:e$1
検索:F([a-z]*) 置換:f$1
検索:G([a-z]*) 置換:g$1
検索:H([a-z]*) 置換:h$1
検索:I([a-z]*) 置換:i$1
検索:J([a-z]*) 置換:j$1
検索:K([a-z]*) 置換:k$1
(省略されました続きを読むにはここをクリックしてください)
411:デフォルトの名無しさん
08/11/14 12:10:39
●正規表現の使用環境
Repl-Ace
※ URLリンク(www.sirmiles.com)
●検索か置換か?
置換
●説明
testA
きょう
あした
testEndA
や
testA
あした
あさって
しあさって
testEndA
のようなtestAからtestEndAで囲まれている文字列(改行あり)を特定文字列に置換
●希望する結果
testA
1週間前
2週間前
testEndA
412:デフォルトの名無しさん
08/11/14 14:23:21
正規表現を魔法のプログラミング言語だと勘違いしてないか?
413:デフォルトの名無しさん
08/11/14 14:52:11
そのツールでうまくいくかどうかわからんが
パターン testA\n.*?testEndA\n
置換文字列 testA\n1週間前\n2週間前\ntestEndA\n
でいいのか?
何を期待してるのだかよくわからんが...
414:デフォルトの名無しさん
08/11/14 14:59:43
処理系によってはドットは改行とマッチしないので注意。
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>
こんな感じで
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4794日前に更新/194 KB
担当:undef