1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 前スレ 正規表現 Part4 pc11.2ch.net/test/read.cgi/tech/1186030400/
357 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:52 ] 現在『[\x20-\x7E]』とやって半角文字を抽出してるんですが 半角の空白のみを含まない場合は、どうやって表現したら良いでしょうか お願いします。
358 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:25:44 ] >>357 アスキーコード表を眺めてみましょう。
359 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:38:16 ] >>358 ありがとうございました『[\x21-\x7E]』でいけました。 ところで、vb2008のRegexクラスでは、^による否定ってできないのでしょうか
360 名前:359 mailto:sage [2008/10/28(火) 13:01:21 ] 使えることがわかりました。自分の記述が悪かったみたいです。ありがとうございました。
361 名前:デフォルトの名無しさん [2008/10/29(水) 18:31:37 ] C#で 数字4桁で後ろに 何もない ハイフンが1個 ハイフンと小文字のアルファベットa-z の3パターンにマッチするには、どう書けばいいのでしょうか 例 1234 2345- 7896-d
362 名前:デフォルトの名無しさん mailto:sage [0-9]{4}(-[a-z]?)? [2008/10/29(水) 19:21:52 ] >>361 >>2 あたりは一通り読んだのか?
363 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:45:54 ] 優しさに泣いた
364 名前:デフォルトの名無しさん [2008/10/30(木) 01:04:02 ] 環境)OS:WinXP-Pro,Mem=3GB,開発ソフト:FlashCS3-Pro(Player9.0,AS3.0) Flash-ActionScript 3.0で正規表現を用いて、テキスト中の 1.2345 -0.1234 10.5678 といった数値を抽出しようと思いますが、この場合の小数点の扱いはどのようになるのでしょうか? テストで .[0-9] (小数点とその右の数値を抽出)を行ったところ、e1 というコードが現れ、 全く出鱈目な結果を得ました。 (ActionScript3.0で「.」は任意の1文字なので仕方ないのですが・・・) Flashの場合に限らず、小数点を含む類似のサンプルがありましたらご紹介下さい。
365 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:07:55 ] OSとメモリに和んだ 任意の一文字を表す . を \ でエスケープすれば . そのものになると思うよ
366 名前:364 mailto:sage [2008/10/30(木) 01:31:46 ] >>365 早速のレス有難うございます。 たった今、手元の本で見つけたのですが、 . はAsciiコードで \x2E と表現するということなので、 これで試しましたが駄目でした(Unicode表記 \u002E でも駄目でした) 半角マイナス(\x2D)やスラッシュ(\x2F)は問題なく抽出できたのですが・・・
367 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:06:44 ] 正規表現オブジェクトをどうやって作ったのか そのオブジェクトとどうやってマッチさせたのかわかるコードを貼ってみて もし前者で new RegExp("\x2E[0-9]") とかしてるとややこしいことになる 正規表現リテラル /\x2E[0-9]/ や /\.\d/ なら期待通りに動くはず
368 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:54:50 ] [.][0-9] なんて手もある。 一文字多いけど、 \ の扱いが面倒な状況だと役に立つかも。
369 名前:364 mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 01:02:32 ] 今北 最後のやつはダブルクォート中のエスケープだから実態は“.d”で 任意の1文字+dで解釈されたと思われる それをするなら“\\.\\d”だろうか どうも「\でエスケープ」の意図が伝わってなかった気がするね できたんならよしとすればいいけど
371 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 06:50:23 ] だね。ややこしいところではある // ASコンパイラは文字列「ドット、次に d 」と解釈 "\.\d" // 正規表現コンパイラは文字列「ドット、次に d 」を元に正規表現を作成 // 結果、任意の一文字に続いてdが来る文字列にマッチする正規表現が出来上がる new RegExp("\.\d", "g"); こういうのにはまったら、ASコンパイラと正規表現コンパイラの二者が (概念的には)存在することを思い出すといいんじゃないかと思う もちろん、とりあえず正規表現リテラル /.../ 使っとこう、でも構わない あと >>369 のコード中の str に文字列 od が含まれていないか確認を
372 名前:364 mailto:sage [2008/11/01(土) 11:41:13 ] >>371 すいません、レス遅くなりました。 ここに貼った var str:String は元が長いので、途中を省略したもので、コード上の元の 文字列には確かに od が入っています。 AS3.0の new RegExp("\.\d", "g"); だと、od(〜d) が対象になるのかなあ・・・・
373 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:47:44 ] CSVの分割は正規表現では完璧に表現できない プログラムで対処が一般的
375 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:01:42 ] >>373 PHPなら専用の関数が元からあるだろう?
376 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:31:19 ] ●正規表現の使用環境 Ruby1.8 ●検索か置換か? 置換 ●説明 ファイル名の頭から指定の文字列Xまでをなくす ●対象データ 例)指定の文字列X → "test" ドラゴンボールtestあいうえお.txt あああいいいtest.txt ●希望する結果 testあいうえお.txt test.txt
377 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:35:30 ] "aaaiiitest.txt".sub(/.*?test/, "test") "aaaiiitest.txt".slice(/test.*/)
378 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:40:12 ] テラ早い回答ありがとうございました
379 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 09:49:48 ] ●正規表現の使用環境 Perl v5.8.8 ●検索か置換か? 検索 ●説明 F1という文字列が含まれていたらヒットさせたい ただしF1の前にFが付いている場合はヒットさせたくない ●希望する動作 "F1 ほげほげ" →真 "FF11 ほげほげ" →偽 [^F]F1 [^F]?F1 などと試して見ましたが失敗でした
380 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 10:11:16 ] 自己解決 これでうまくいきました ^F1|[^F]F1
381 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 14:32:31 ] 否定戻り読みとか使うのもいいだろう。 (?<!F)F1
382 名前:デフォルトの名無しさん [2008/11/08(土) 14:36:05 ] CodeZineの記事オススメだなテンプレにいれとこうぜ codezine.jp/article/detail/3039 codezine.jp/article/detail/2676
383 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 06:56:57 ] >>381 それは否定先読み
384 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 07:01:53 ] これ間違ってる? (?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。 (?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。 aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。 aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
385 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 07:04:38 ] >>383 は無かったことにしてくれ
386 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:18:59 ] ●正規表現の使用環境 lex ●検索か置換か? 検索 ? ●説明 C言語のコメントで使われるような書式の検索 /*で始まり*/で終わるような文 ただし途中で*/は出現しない 漢字コードはEUCです。 コメントが英数字だけならできそうなのですが 漢字などが入ってくるとよくわかりません。 よろしくお願いします。
387 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 10:47:44 ] EUCなら、漢字がバラになっても英数字とコードが重複しないから 問題ないのでは?
388 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:20:03 ] >>387 できれば正規表現を教えてもらえないでしょうか? 英数字は[a-zA-Z0-9]のようにできると思いますが ひらがなやカタカナは[あ-んア-ン]のようにはやはりできませんよね? 文字コードで書くのでしょうか。。。。
389 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:21:52 ] >>388 この場合、正規表現にひらがなやカタカナを書く必要ないでしょう?
390 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:40:01 ] >>389 コメント/**/の中にひらがなやカタカナ、漢字、英数字がでて来ると思うのですが 必要ないのでしょうか? 例として 「/*(A|***B)*/」 Aは「*、/」以外の文字を表しBは「/」以外の文字を表す。 演算の*と混乱をさけるためアスタリスクは全角大文字にしているが 実際は半角にする。 このAとBを表したいのですが。。。。 例えば[0-9a-zA-z(漢字コード?)^/*(/と*を除く)]のようにすればいいのでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:15:38 ] 後出しで条件つけるなよ・・・
392 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:04:37 ] >>390 目的は、コメント中の「*」を「*」にすること?
393 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:19:29 ] >>391 すみません、質問の仕方が悪かったです; >>392 いえ、「/*(A|***B)*/」の「*」は本当は「/*(A|xx*B)*/」 とかけてC言語ではかけるの「x」は「*」で、 正規表現の0回以上繰り返す「*」とかぶってしまうため 「/*(A|***B)*/」とかかないで「/*(A|***B)*/」と書いていると思います。 何がしたいのかはlexを使って字句解析をしたいのですが コメントの部分をスルーするための正規表現の仕方がしりたいのです。
394 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:25:36 ] 字句解析するなら /* と */ だけ検知して 途中は読み飛ばせばいいような気がするんだけど、そうじゃないの?
395 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:29:59 ] 英数字なら出来そうとかのたまっているけど、まずはそれで実装してみりゃいいじゃんね。 それでEUCコードの部分で引っかかるようなら改良すればいい。
396 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:40:59 ] ダメだこりゃ
397 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:45:57 ] >>394 が正解。 コードで書くのは簡単なんだが、正規表現にするには独特のコツがいるという タイプの問題なので、下手にこだわるよりさっくり問題そのものを別の方法で 解決してしまったほうが早い。
398 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:58:13 ] よく分からんが、最短マッチが使えないからどうしようって話か? /* -> COMMENT状態に遷移 */ -> 戻す でいいんじゃね
399 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:03:53 ] >>394 /*と*/を検知するには {^/*}{/*$}のような感じでいいのでしょうか? 行が複数行になったらおかしくなりませんんかね。。。。。
400 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:28:50 ] ん、あれ? 別の板の正規表現スレで似た話があったから、その続きかと思った。 量指定子を+と*で書くと、 /*([^*]|*+[^/*])**+/ となる。
401 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:03:37 ] >>400 回答ありがとうです<(_ _)> よく考えて見ます。。 ちなみにマルチはしていません@@
402 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 22:36:25 ] コンパイラコンパイラで使用できる正規表現というかEBNFは、しょぼくて、マルチバイト 対応するの大変だから生成されたパーサだけ使用して、スキャナは自前実装がお勧め。
403 名前:デフォルトの名無しさん [2008/11/11(火) 04:08:42 ] ●正規表現の使用環境 Excel & 正規表現検索 ※ ttp://srcedit.pekori.jp/tool/excelre.html ●検索か置換か? 置換 ●説明 英単語のみ先頭文字を小文字化 ●対象データ One Two Three3 ●希望する結果 one ^ two ^ Three3 ^^^^^^^ ○自分の経緯 検索:(^[a-z])([a-z]*) 置換:[LOWER]$1$2 結果:One ⇒ [LOWER]One ○知りたいこと このアドインにある「特殊置換」を利用する際の文法 以上、お願いいたします。
404 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:08:45 ] おれなら Excel をデスクトップの「ごみ箱」へD&Dする
405 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:18:15 ] コントロールパネルからアンインストールしないと意味ないって警告出るだろ。
406 名前:デフォルトの名無しさん [2008/11/12(水) 05:26:09 ] mmMMamUUqpndbback
407 名前:403 mailto:sage [2008/11/12(水) 05:43:22 ] それができたら、どんなに楽か・・・
408 名前:デフォルトの名無しさん [2008/11/12(水) 20:14:38 ] とりあえずこのスレ>>1-10 まで流し見て全く理解できなかった もう一度読んでみるのが怖い
409 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:43:19 ] >>403 特殊置換は変換後にそれだけしか書けないんじゃない? とりあえず変換するだけなら↓でいけないか 変換前:^[a-z]+$ 変換後:[LOWER]
410 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2008/11/14(金) 12:10:39 ] ●正規表現の使用環境 Repl-Ace ※ ttp://www.sirmiles.com/repl_ace/ ●検索か置換か? 置換 ●説明 testA きょう あした testEndA や testA あした あさって しあさって testEndA のようなtestAからtestEndAで囲まれている文字列(改行あり)を特定文字列に置換 ●希望する結果 testA 1週間前 2週間前 testEndA
412 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:23:21 ] 正規表現を魔法のプログラミング言語だと勘違いしてないか?
413 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:52:11 ] そのツールでうまくいくかどうかわからんが パターン testA\n.*?testEndA\n 置換文字列 testA\n1週間前\n2週間前\ntestEndA\n でいいのか? 何を期待してるのだかよくわからんが...
414 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:59:43 ] 処理系によってはドットは改行とマッチしないので注意。
415 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:38:18 ] 正規表現に通じている先輩は正に魔法のように正規表現を使ってあらゆるリクエストに解を提示している。 あんな人になるには一体どうすればいいんだろうか?
416 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:57:27 ] とりあえずふくろう本は読んだか?
417 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:46:38 ] やっぱりあのそこそこ分厚い青い本に挑戦したほうがいいみたいですね。TODOリストの一番上に上げときます。
418 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 23:15:54 ] 正規表現って何なんだよ 表現に正規も糞もあるか!
419 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 23:20:45 ] 正則表現という訳も、あるにはある。
420 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:25:47 ] 「正規表現」という表現は、確かに適切でない。 では何が良いかといわれると、判らない。 明治時代の人々は、偉大だった。
421 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:38:54 ] regular expression を無理やり「正規表現」と訳しただけ。 アテ字と言って過言ではない。意味を深く考える必要は無い。
422 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:39:30 ] 「帝王切開」 みたいなもんだな。
423 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:53:00 ] は?
424 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:54:53 ] 洗濯を選択だな
425 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 13:49:35 ] 何それ気になる
426 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:37:48 ] 形式言語理論の分野では正則表現ともいう まあ今時の言語で使えるような正規表現はもはや正則言語で表現できる範囲を 越えてたりするんだけどね
427 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:05:57 ] 性器表現
428 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 22:00:13 ] モザイクやハレーションか。 「♪ヤッホー FORTRANランラン」並みに手垢が付いたネタだな。
429 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 22:07:24 ] >性器表現 >手垢が付いたネタ つまりエロ本のことだな
430 名前:デフォルトの名無しさん [2008/11/16(日) 14:47:16 ] よろしければ、お知恵をおかしいただきたいです。 "あるマックなどPCがあり、マックなどのコンピュータ" の文字列から、/マックなどの?(.+)/のような正規表現で、「PCがあり、」「コンピュータ」の文字列を 取得したいのですが、うまくいきません。この場合、どのようにするのがよいのでしょうか? よろしくお願いいたします。
431 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:58:39 ] >>430 環境を書け
432 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:46:20 ] 環境を書けば答えられるの?
433 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:51:09 ] 出来ない、というのも答えの一つだしな
434 名前:デフォルトの名無しさん [2008/11/16(日) 20:14:40 ] >>431 430です。 Ruby 1.8.6、UTF8です。 お願いします。
435 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:18:42 ] >>431 ほら、質問者が環境書いたぜ。 「出来ない」 って答えろよ。
436 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:21:20 ] 文字列を切り取りたいわけだろ? 文字列を切り取るには、何が必要だ? どこから、どこまで。スタートとエンドだ。 /マックなどの?(.+)/ これにはスタートはあるが、エンドが無い。 どこまで切り取ればいいのか不明なんだよ。 どこから・・・マックなどの? どこまで・・・ ←これを決めろ。
437 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:46:51 ] >>435 何なんお前 建設的なレスできないなら無駄なレスすんなよ
438 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:49:37 ] で?環境書けば出来るの?
439 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:51:20 ] うん
440 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:02:54 ] >>430 str = "あるマックなどPCがあり、マックなどのコンピュータ" re = /あるマックなど(PCがあり)、マックなどの(コンピュータ)/ puts re.match(str).to_a[1..2]
441 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:13:42 ] ↑↑ 氏ね
442 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 08:23:20 ] 次の マックなどの?(.+) もしくは行末までなんじゃないかな。
443 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 09:34:46 ] 片仮名と平仮名の境目で切るのかな。 状態を持つ物なら、何らかのプログラミング言語を使わないと。
444 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:32:29 ] 他人が勝手に仕様を決めていいのかよ
445 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:33:30 ] >>421 最初に訳した人が誰かは知らないが、regularの捉え方を間違えている。 正しいではなく、普通のと言う意味あいで(例:レギュラーガソリン) 汎則式とでもしておけば、初学者の違和感も起きないものを…
446 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:43:21 ] どうでもいいですよ
447 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:07:42 ] みんなチョムスキーが悪い
448 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:40:18 ] とりあえず 置換前:^(.*\\)(.*?)$ 置換後:D=\1\r\nF=\2
450 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:03:03 ] >>449 ありがとうございました
451 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん [2008/11/18(火) 12:14:47 ] .* (.*?)[/>].*$ でいけました!お手数おかけしました!
453 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 09:31:33 ] とても大変だと思うのですが、よろしくお願いします。 ●正規表現の使用環境 Windows上で動く「Perl5の正規表現と互換性のある」とマニュアルに書いてある フリーの(今はシェアになっています)クリップボード拡張ソフト マニュアルには、参考事例として ・複数行のテキストに含まれている空白記号をすべて削除する [@ s/[ ¥t ]//gmk] ・複数行のテキストに引用記号をつける [@ s/^/> /gmk] などが書かれています。 ●検索か置換か? 置き換え です。 ●説明 窓の杜などからソフトウェアのファイルをダウンロードするときに、 そのソフトをレビューした記事のタイトルをダウンロード先フォルダの名前にしています。 しかし、記事からタイトルをコピーして、フォルダ名としてペーストするだけでは 「ファイル名には次の文字は使えません。」という警告をWindowsから受けてしまうことが頻繁にあります。 Windowsでフォルダ名に使えない文字を削除しつつ、無意味な連続する空行を削除し、 ペーストしただけでフォルダ名として使える文字列へと変換できる正規表現を考えていただけないでしょうか?
454 名前:453 mailto:sage [2008/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 mailto:sage [2008/11/20(木) 09:35:51 ] なお、Windowsでフォルダ名に使えない文字列は \ / : , ; * ? " < > | および 改行 とのことなので、これらを含まない形へ整形できたらと思います。 これらを一度に処理することが、正規表現で可能なのかどうかも分からないのですが、 もし、できそうなら、どなたか編み出してもらえないでしょうか? よろしくお願いします。
456 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 13:49:38 ] とりあえず、 s/[\\\/:,;*?"<>|]/_/g みたいな。細かい改良点は自分で考えなよ。
457 名前:デフォルトの名無しさん [2008/11/23(日) 00:32:05 ] ………[2バイト文字][改行] [2バイト文字] ↑このパターンを ………[2バイト文字][2バイト文字] にするにはどう書けばよいでしょうか?