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バイト文字] にするにはどう書けばよいでしょうか?
458 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 02:19:43 ] s/\n//
459 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 02:39:08 ] >>457 テンプレくらい読め。 それにそんだけじゃ情報が足りなすぎだ。 どうせ元データは何百行とあるんだろう? どういう行とどういう行を連結したいのか位は明確にしろ。
460 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 05:28:19 ] ^ *\d+\. もし空白やドットが不要で通し番号だけ拾うのなら、 ツールにもよるけど ^ *(\d+)\. とか適当にアレンジして試しておくれ
462 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 06:36:22 ] >>460 それ、置換なの?
463 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 10:02:54 ] >>461 ありがとうございました! ^ *(\d+)\. これでIPとPortだけに置換することができました。
464 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:26:32 ] よろしくお願いします。 ●正規表現の使用環境 Flexible Renamer(Perl5互換) ●検索か置換か? 置換 ●説明 ファイル名の一部を別の位置へ移したい。 ●対象データ (日付)(場所)hogehoge というフォルダ名や (日付)(場所)hogehoge,jpgというファイル名 ●希望する結果 (日付)hogehoge(場所)や(日付)hogehoge(場所),jpgというようにしたい。
465 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:29:21 ] その日付や場所を特定するための法則は?
466 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:41:40 ] それぞれ 「()」 でくくってあります。ともに一緒の括弧だとまずかったりしますか?
467 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:56:36 ] ああ、その括弧は実際も括弧だったのねw
468 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:03:16 ] >>464 s/^(\(.+?\))(\(.+?\))(.+)(\..+)?$/$1$3$2$4/
469 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:43:45 ] ありがとうございます。 自分の悩んだ時間などウソのようにすっきり成功してしまいました。 今までも正規表現を使いたいと思って色々サイトを巡ったのですが 今回の答えも答えをもらって、見れば分かるぐらいの理解しかないのです。 良い学習サイトなどがあれば教えてくれませんか?それともオライリーの本を買うべき?
470 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:45:58 ] >>469 俺はこのスレでROMって勉強してる
471 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:47:49 ] とりあえずソフバンあたりで出してる入門書でもいいから 一冊読んだ方がその後が楽になる
472 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 17:29:37 ] >>468 が理解できるのなら、正規表現の基本はできてる気がする。 (カッコのエスケープ、最短マッチ、後方参照あたり) もしプログラミングの経験がなければ、そっちを補ったほうがいいと思う。 正規表現も一緒に学べる『初めてのPerl』『たのしいRuby』あたりお勧め。 リネーマーも自分で作れるよ。
473 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 17:49:46 ] おお、このスレの人は優しい人ばかりですね。 プログラムはPHPぐらいで、しかも正規表現がどうしても必要な場面に 遭遇した事がありません。 これからこのスレをROMったり、挙げてもらった本も入門書のようですので 探して見て勉強してみようと思います。 ありがとうございます。
474 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:49:00 ] ■質問 2ch のレスの >>*** を、テキストエディタを用いて #aa(){{{>>***}}} に置換したいのですが、方法はありますでしょうか?
475 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:56:30 ] >>*** のうち、どれが固定でどれが可変なのか区別がつかないと答えられない。 もし全部固定なら、そのままエディタの置換機能を使えば済む。 >>5 を見て、対象データの例と希望する結果を書いてくれ。
476 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 12:56:55 ] >>475 ありがとうございます。わかりにくい表現で申し訳ありません。 ↓が対象データの例と希望する結果です。 ●対象データ >>123 >>456 ●希望する結果 #aa(){{{>>123 }}} #aa(){{{>>456 }}}
477 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:01:41 ] >>476 検索 >>(\d+) 置換 #aa\(\)\{\{\{>>$1\}\}\}
478 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:18:38 ] 置換後の文字列が↓のようになってしまいました。 $1 のところを \d+ や (\d+)、$\d+、$(\d+) に変えて色々やってみましたが ダメでした。置換には EmEditor Pro 7.02 を使っていますが、 何かやり方が誤っているでしょうか? #aa(){{{>>$1}}} #aa(){{{>>$1}}}
479 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:37:14 ] それはソフトの使い方を読むか、サポートに聞け
480 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:31:04 ] >>478 後方参照を $1 ではなく \1 で行う 置換 #aa\(\)\{\{\{>>\1\}\}\}
481 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:18 ] >>480 お返事遅れました。 すっげwマジで出来たw 正規表現って本当にすごいですね。 自分は \t や \n 等、基本的なものしかわからなかったのですが、 今回の質問が非常に勉強になりました。 次に疑問が湧いた時には、正規表現でできないことはないという姿勢で 解決に望もうと思います。 ありがとうございました。
482 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:51 ] >>480 その括弧のエスケープはなんかいみあるの?
483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:55:12 ] ■追記 ちなみに、今回の置換の目的なのですが、 atwiki という wiki のページで > のような特殊文字を書くと、 適切に表示がされない不具合(?)があるので、 アスキーアート表示用のメソッド #aa(){引数} を用いて、> を囲みたいなと思ったのが目的でした。 初めは手動でやっていたのですが、あまりにも数が多いので 置換化できないかな、と思った次第です。 長文失礼いたしました。
484 名前:480 mailto:sage [2008/11/29(土) 15:01:52 ] 置換文字列なので無いw 置換 #aa(){{{>>\1}}} こうだね。 吊ってくる
485 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:21:23 ] >>482 ,484 小かっこ () って、正規表現モードでも \ をつける必要ないんですか。 勉強になりました
486 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:29:35 ] >>485 置換文字列は正規表現じゃないというだけ。 正規表現で書かなきゃいけないところで()そのものを書くには エスケープする必要がある。
487 名前:デフォルトの名無しさん mailto:sage [2008/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 mailto:sage [2008/11/30(日) 14:12:51 ] 申し訳ありません。(^\(|[^\\]\()(?<content>[^\(]*[^\\])\) で解決しました。
489 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:16:29 ] /(?<!\\)\((?<content>.*)?(?<!\\)\)/
490 名前:デフォルトの名無しさん [2008/12/03(水) 17:36:22 ] aaa777 あああああ aaa778ああああ aaa7 aaa7あああ aaa7aaa8 aaa7 aaa8 目的はaaa7をbbb7に置き換えたい。 しかしマッチ方法で苦しんでいます お助けを・・ /aaa7/ これでは全部置き換わる /aaa7[^\d]/これでは 下の3つが余計な部分含めてマッチしてしまう。。 下から4つ、aaa7のみマッチさせる方法はあるでしょうか。 www.rider-n.sakura.ne.jp/regexp/regexp.php ここで簡単に調べられるのですが宜しくお願いします。 Perl互換の正規表現にチェックをいれていただけるといい感じです。
491 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:46:49 ] >>490 /aaa7(?=[^\d])/ 次からは>>5 でお願い。
492 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:48:08 ] aaa7(?=[^\d]|\Z) そのチェッカーとやらの使い方がよくわからんので試してないが。 (?=ほげ) で先読みが、\Z で改行または文字列末にマッチ、ができることを 前提としている。 何を使っているのかよくわからないが(PHPのPerl互換モード?) 先読みと改行と文字列末の扱いを確認してみること。
493 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:50:47 ] よく考えたら /aaa7(?!\d)/ でよかった。
494 名前:490 mailto:sage [2008/12/03(水) 18:28:57 ] >>491 もうしわけないです次から気をつけます。 >>491-493 ふむふむ 先読みという事ができるのですね 結果うまくいきました!ありがとうございました。 先読みと改行と文字列末 これを詳しく勉強してみます。
495 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:31:18 ] よくそれだけで答えられるな こう読んだけど違うのかな s/aaa(?=7)/bbb/ >>494 が来てたのでもういいみたいだけど
496 名前:492 mailto:sage [2008/12/03(水) 18:47:11 ] [^\d] は \D でよかったな。 >>495 aaa777 にもそれだとひっかかるよね? それにはひっかけたくないらしかったから。
497 名前: mailto: [2008/12/05(金) 00:09:56 ] ()() [][] {}{}
498 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 21:09:48 ] ふらっとC#,C♯,C#(初心者用) Part34 ttp://pc11.2ch.net/test/read.cgi/tech/1227521785/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 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:00 ] >>498 (\w+)+ みたいな感じになるから遅いんだろうねえ。 \s+\w+(\.\w+)*$ でどうか。
500 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:51 ] キャプチャするから \s+(\w+(\.\w+)*)$ こうか。
501 名前:498 mailto:sage [2008/12/06(土) 23:56:46 ] >>499 ,500 ありがとうございます、見違えるように早くなりました (\w+)*は良くても(\w+)+は遅くなるんですね
502 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 03:52:21 ] >>501 > (\w+)*は良くても(\w+)+は遅くなるんですね んー、そういうことではないぞ。 \.? は有っても無くてもいいけど、(\.\w+)* の \. は必要でしょ。 (\.?\w+)* にしたらやっぱり遅くなるはず。 (\w+\.?)+ は「.xxxxxx」だけにも何通りもマッチの仕方があるけど、 (\.\w+)*は1通りしかマッチできない。この違いだよ。
503 名前:498 mailto:sage [2008/12/07(日) 10:07:49 ] >>502 ? と +(もしくは*) の組み合わせが最悪だったわけですか 今度から注意します
504 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 13:53:02 ] >>503 なんかまだ誤解してるっぽいな。 *)* みたいに、カッコの内側の最後に繰り返し指定(*やら+やら)があって、 その外側すぐにも繰り返しがあるのが問題(になることが多い)。 498が最初に書いたようなマッチしないデータを食わせたときに、 バックトラック回数がとんでもなくでかくなって遅くなる(可能性がある)。
505 名前:498 mailto:sage [2008/12/07(日) 15:05:16 ] >>504 理解が遅くてすみません、ようやく分かりました 丁寧にありがとうございました
506 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 20:39:26 ] 正規表現が手に入れた強力すぎる「構文理解(マッチ)能力」って、 外国語の翻訳に使えそうな気がするんだけど、その観点での研究って進んでないの?
507 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:38:53 ] そりゃ無理でしょ。 yaccやbisonで実用になる翻訳ソフトが作れるって話は聞かないから。
508 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:53:34 ] >>506 正則言語はそんなに広いクラスじゃないぞ
509 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:56:51 ] >>506 一般の自然言語と正規言語では言語のクラスとして天と地ほどの差があるよ。 たとえば、多くの自然言語は無限回のネストを許容するが、これは正規文法で表せない。
510 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 08:03:55 ] お前らちゃんと日本語話せよ何言ってるか分かんねぇよ
511 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:28:01 ] お前が勉強不足なだけだ。
512 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:45:24 ] なんて面白みの無い、むしろマイナスなレスなんだ
513 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 18:38:31 ] ●正規表現の使用環境 PHP4.4以降 ●検索か置換か? 検索後、個々に置換 ●説明 ユーザーが入力したhtmlデータ内に 特定の文字で囲まれたものを変換したい。 %test%や%nullpo%など。 ●対象データ フォームで送信されたhtmlデータ <html> <head> </head> <body> %adv% あいうえおかきくけこ<br> %adv% </bnody> </html> ●希望する結果 %adv%を発見した位置を返し、それを指定された文字列で置換する。 %adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。 よろしくお願いします。
514 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 19:41:55 ] >>513 >%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。 この時点で、正規表現でやるのには無理がある。 状態を持つには何らかのプログラミング言語で。 HTMLならJavaScriptか。
515 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:03:49 ] PHP使ってるからテンプレートエンジン使ったらどうだろうか
516 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 09:24:04 ] >>516 >%adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。 この文章を素直に解釈すると、同じ「%adv%」でも状況に応じて 「こんにちは」にも「さようなら」にもなるって事じゃないのかな。 で、そういう状況依存的な内部状態を持つ操作は、 変数や条件判断文のあるプログラミング言語でないと不可能。 何か変?
518 名前:506 mailto:sage [2008/12/13(土) 22:59:58 ] >>507-509 正規表現の(現時点での)限界があることはわかりました。 が、自然言語の「(ある種の)典型的な表現」を滑らかに翻訳するという狭いクラスのタスクに対しては 正規表現がその強力な威力を発揮できると今でも思っています。
519 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:02:11 ] 限界とか威力とか意味わかんね。 正規表現なんて正規文法を別の記号で書き直しただけじゃん。 数学的に厳密な定義のあるものなんだから、 明日になって威力が変わったりしないよ。
520 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 02:58:28 ] 正規表現を、どんな夢でもかなえてくれる魔法の呪文とでも勘違いしてないか?
521 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 08:53:37 ] 文法の表現力では 正規文法 < 文脈自由文法 < 文脈依存文法 < 解析表現文法
522 名前:デフォルトの名無しさん [2008/12/15(月) 00:24:39 ] ABCを含まない行にマッチさせたい場合 ^(?!.*ABC) ←OK (?!.*ABC) ←NG となるのでしょうか? 上記の違いが分かりません
523 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 00:38:48 ] >>522 .*がABCを食うから。
524 名前:デフォルトの名無しさん [2008/12/15(月) 00:49:37 ] ^があるとなぜ食えないんですか?
525 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:52:03 ] /^(?!.*ABC)/の場合、まず/^/が文字列の頭にマッチする。 そこから後ろ(即ち元の文字列全体)が、/^(.*ABC)/にマッチしなければ、全体としてマッチする。 /(?!.*ABC)/の場合は、どんな文字列であっても末尾にマッチする。 なぜなら文字列の末尾から後ろ(即ち空文字列)は/^(.*ABC)/にマッチしないから。
526 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 15:17:08 ] >>517 あーなるほどね。1回目の%adv%では「こんにちは」、2回目の%adv%では「さようなら」にしたい、とかか。 そりゃ正規表現じゃ無理だわ。いや、限定的な状況ならいけるかもしれないけど。
527 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:11:49 ] 含まない行、のような指定は、できるなら -v オプションとか 正規表現より上のレイヤでやったほうがよい。
528 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:32:43 ] それはスレ違い
529 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:58:47 ] いいんじゃない? 正規表現だけでは何もできないんだから。 perl とか、テキストエディタとか、そのた言語と組み合わせないと。
530 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:12:40 ] perlとかテキストエディタとかその他の言語のサポートまではしてられないってことだろ。よう知らんけど。
531 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:43:09 ] >>527 はどこまで正規表現を使うべきかという立派な正規表現ネタに見えた。 正規表現で実現可能なことは無理してでも正規表現を使え なんていう愚かなスレでもないだろうw
532 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:10:18 ] 実用的な解と、パズル的な解か。
533 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:32:23 ] 例えば、 ABC と DEF という文字列があったとき、 ABCの場合 ABC (123) DEFの場合 DEF (345) という形に置き換えるのは可能でしょうか? また、可能ならどのように書いたらいいでしょうか
534 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 14:53:58 ] >>533 できる。正規表現は /ABC/ /DEF/ 意地悪はさておき、ABCやDEFを検出するのは正規表現だけど 置換をするのはそれぞれの「実装言語や処理系ソフトウェア」だから >>5 のテンプレ埋めてくれないと答えられない。
535 名前:533 mailto:sage [2008/12/22(月) 15:54:12 ] すみません 訂正します ●正規表現の使用環境 Jane Style Version 3.01 ●検索か置換か? 検索後に置換 ●説明 文字列にマッチさせた後、マッチした文字列ごとに指定された文字列を後ろに 追加させて置換させたい ●対象データ @ ABC A DEF ●希望する結果 @ ABC (123) A DEF (345)
536 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:25:00 ] 普通の置換でよくね?
537 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 16:51:55 ] すみません、説明が足りませんでした この二件だけの場合は二つ表現を書けばいいですが、 後ですぐに置換したい文字列を追加できるよう、(ABC|DEF)のように orか何かでまとめて作りたいと思っています それは可能でしょうか それともやはり一つ一つ書いたほうがいいでしょうか
538 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:24:29 ] >>537 まとめようにも法則性が無いが。
539 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:27:44 ] てか、Jane Style って専ブラだよね? どういう機能で何をしようとしてるのかがわからないとどうにもアドバイスのしようが... (このスレは基本的には、grepやawkやPerlやPythonやJavaの正規表現のスレなので)
540 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 17:41:12 ] <rx2>(?<=ABC)[TAB] (123)[TAB]msg <rx2>(?<=DEF)[TAB] (345)[TAB]msg
541 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:35:21 ] これですね。ちゃんと書いてあります。 www.monazilla.org/index.php?e=65
542 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:36:27 ] >>538 あまり正規表現について詳しくないもので やはりちょっと無理がありましたね・・・ >>539 すみません 少し勘違いをしていました >>540 有難うございます! すごくスッキリしていていいですね 参考にさせて頂きます
543 名前:デフォルトの名無しさん [2008/12/27(土) 19:09:30 ] perl で abc-def-1234-ghi-jkl これから abc-def を取りたい 1234は数字が4文字です 1234の前を取るのはどうすればいいですか?
544 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:14:41 ] 「取る」とは? 「抽出したい」 → 結果として abc-def が欲しい 「削除したい」 → 結果として -1234-ghi-jkl が欲しい どっち? できれば >>5 を参考に。
545 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 19:31:16 ] もっと高級言語っぽい表記で書けるといいのになぁ。
546 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 20:59:42 ] >>546 12-34でもその一般化したパターンでも使ってマッチングさせてから 特殊変数 $` や@- を参照するなり他の手段で抜き出すなりすればよろしかろ?
548 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 23:26:09 ] >>546 カッコ ( ) をつかえばいいよ。
549 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん [2009/01/01(木) 12:55:59 ] 単純にたくさんのテキストファイルから目当てのキーワードのある行を 正規表現で検索したい場合、Windows環境だとどのツールが便利・一般的なの? 秀丸かな? Unixだとgrepコマンドがあるけど…
551 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:29:08 ] >>550 一般がどうかはしらないけど自分は秀丸やxyzzyの機能を使ってる
552 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:32:37 ] grepでいいよ
553 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:44:45 ] XP以降だと標準でfindstrコマンドがあるね Cygwinを入れるのもいいし、各種テキストエディタに頼るのもいい でも一番の検索ツールは、 | 何について調べますか? | ┌────────────┐ | | | | | | | └────────────┘ | [ オプション(O) ] [ 検索(S) ] | `──────────┐ ┌─── , '´l, ..| ./ , -─-'- 、i_ |/ __, '´ ヽ、 ',ー-- ● ヽ、 `"'ゝ、_ ', 〈`'ー;==ヽ、〈ー- 、 ! `ー´ ヽi`ヽ iノ ! / r'´、ヽ `´ヽノ
554 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 13:51:57 ] | 何について調べますか? | ┌────────────┐ | | おまいの消し方 | | | | | └────────────┘ | [ オプション(O) ] [ 検索(S) ] | `──────────┐ ┌─── , '´l, ..| ./ , -─-'- 、i_ |/ __, '´ ヽ、 ',ー-- ● ヽ、 `"'ゝ、_ ', 〈`'ー;==ヽ、〈ー- 、 ! `ー´ ヽi`ヽ iノ ! / r'´、ヽ `´ヽノ
555 名前:550 mailto:sage [2009/01/01(木) 14:13:35 ] さんくす、やっぱりそのへんかぁ。
556 名前:551 mailto:sage [2009/01/01(木) 14:17:19 ] このスレのせいで550がイルカの虜になってしまった なんて親切なスレなんだ
557 名前:553 mailto:sage [2009/01/01(木) 14:17:59 ] 名前間違えた、>>556 は553
558 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:43:20 ] 2007ではイルカ出なくなってるよね
559 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 11:46:47 ] 冴子先生がいい
560 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 16:37:56 ] スターウォーズのジャージャービンクス Office のイルカ 大ヒットメーカーが調子に乗りすぎて生み出してしまった 世界の2大うざキャラ。
561 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 17:31:36 ] なんかわかるw
562 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 11:11:00 ] perlで下のような場合にマッチさせたいのですが、どのようにすればいいのでしょうか? <[a-z]+ lang="ja">.*?</[a-z]+> 最初の[a-z]+と最後の[a-z]+は同じタグを指定したいのですが、 このままだと、</a>や</b>といった終了タグが先に引っかかってしまい、 いびつな形でマッチしてしまいます。
563 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:22:05 ] >>562 正規表現一発じゃキツい スキャナを書くか、素直にHTMLパーザ使った方が
564 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:36:17 ] >>562 バックリファレンスかな <([a-z]+) lang="ja">.*?</\1> こんな感じで
565 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 17:54:09 ] >>564-565 > <([a-z]+) lang="ja">.*?</\1> でうまくいきました。 残念ながら、XMLパーサの使い方がわからない。勉強しないとなぁ… 目的は和英中が混在しているxmlから日本語の部分だけ抽出したかったので、 今回はこれで十分です。 XMLとHTMLタグが混在した形式だったんですが、何故か、HTMLタグにlang設定が されていて途方にくれていました。
567 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 18:39:02 ] たとえば <xxx lang="ja"><xxx>foobar</xxx></xxx> というときにちゃんと取り出せないねえ 本当にちゃんとやろうとしたら正規表現だと無理だな
568 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 12:59:56 ] XMLは文脈自由文法だからPCREの拡張とか使わないと無理
569 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:53:47 ] 正規表現のライブラリを自作してるのですが参考になるサイトはないでしょうか。 容易な拡張性を確保するためにオブジェクト指向を使って実装してます。 例えば inputstr[k] == pattern[k] ? ではなくて pattern.can_eat(inputstr[k]) のようなpatternをレシーバ(インスタンス)としたかんじです。 現在はグループの中にグループがあるとどうやって解決するか悩んでいます。 (ab(cd|ef)gh) などで、一応JAVAで実験してます。
571 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:59:04 ] pattern.can_eat(inputstr[k]) ? pattern.contains(inputstr[k]) ? などでboolean関数です。 性能は速いかどうかではなく、コンパクト・コードサイズ小さいなど目指しています(機能拡張はオブジェクト指向と同じくプラグインしますんで)。 構文木を作るとかではなく容易にスクラッチから書ける程度のコードサイズで、かつ動的に実行時に機能追加できると言うのが条件で作っています。
572 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 14:04:39 ] 他の言語の正規表現APIは参考にしてる? OOならJava, Ruby, Python, .NETとあると思うけど
573 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:14:50 ] あれ?反応ないですね。 オブジェクト指向を使った実装だと構文木を使ったものよりもだいぶ簡単になる(見通しがよくなる)んですけど・・・ 多少コード量(というかクラス・ファイル数)は多くなるんですけど、やっぱりインタプリタは旧来式の構文木を使った実装しかやらないんでしょうか。
574 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:28:45 ] 何をしたいのかが伝わってないんだろう。 読んで、正規表現ライブラリを利用者に見せるためのAPIの話ではないの かも、という印象は持ったが、それ以上は考えるが面倒くさいのでス ルー。
575 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:07:17 ] もっぱら使う側が多いからじゃないのかな。特に不満もないし。。 鬼車のポジションを奪える可能性もあるからがんばって!
576 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:37:56 ] 参考になるサイトもないでどうやって頑張るんだよ! 3日ぐらい悩んで大体めどがたってきたから別にいいけど。
577 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:29:58 ] 途中で書き込んでしもた。めんどくせ
579 名前:デフォルトの名無しさん [2009/01/22(木) 11:45:20 ] ●正規表現の使用環境 prel ●検索か置換か? 置換 ●説明 特定タグ間のHTMLタグを全て削除する (<body>から</body>までのタグを全て削除) ●対象データ <html> <body> テスト<BR> <b>です。</b> </body> </html> ●希望する結果 <html> <body> テスト です。 </body> </html>
580 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 13:41:18 ] >>579 $html =~ s{(?<=<body>).+(?=</body>)} { (my $body = $&) =~ s/<.+?>//gs; $body; }es;
581 名前:デフォルトの名無しさん [2009/01/22(木) 14:08:55 ] >>579 のおかげで prel でぐぐっても perl が検索対象になることを知った
582 名前:581 mailto:sage [2009/01/22(木) 14:11:05 ] ごめん、正確には prel 正規表現 など prel と何か別のキーワードでぐぐったとき prel は perl とみなされるっぽい
583 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 16:40:10 ] ワロタ
584 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:40:12 ] 余談になるけど、VBSの正規表現は、処理系の実務にも耐えられるくらいの機能は持ってるよ。 条件判定としての正規表現を使える事は、VBAユーザーにとってこれ以上無いほどのメリットだと思ってる。 俺もそんなに正規表現は詳しくはないけど、エクセルで使う目的を考えると、VBSの正規表現は非常に使い勝手が良い。 良くも悪くもシンプルなんだよね。 仕事で文字列操作やRDBみたいな使い方してる人ならば、絶対に覚えておいて損はないよ。 後方参照が表現できるようになって、世界が開けました。 どうでも良い話かもしれないけど、マジでお勧め。
585 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:40:37 ] 誤爆しました。すいません。
586 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:36:14 ] 文字列の中から名前を取り出したいのですがどうやって書けば良いでしょうか
587 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 00:08:31 ] 「名前」の定義は? 環境も。
588 名前:586 mailto:sage [2009/01/28(水) 00:46:35 ] 名前は人名です 環境はVB.NETです。
589 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 00:51:34 ] 人名の定義は?
590 名前:デフォルトの名無しさん [2009/01/28(水) 00:56:14 ] それを聞いてる
591 名前:479 mailto:sage [2009/01/28(水) 03:07:22 ] 形態素解析の領分だろうね。 どこまで固有人名を解析できるかは性能と元の文章次第だけど。
592 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 03:07:56 ] すまん、名前消したつもりが残ってた
593 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 06:56:44 ] 辞書も必要だな
594 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 10:19:24 ] 形態素解析までしなくても、日本全国の苗字と名前のテーブルを作って 「苗字+名前」で引っこ抜けばいいと思う
595 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 10:37:13 ] 「あや」と「あやの」みたいのをどう 扱うかとか考え出すとなにげに難しい
596 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 11:34:07 ] 英語と違って日本語は「わかち書き」をしないから難しいやろね。
597 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 18:51:36 ] (鈴木|佐藤|山田| ... )\s*(太郎|花子| ... )
598 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 19:16:08 ] >>586 よ、別に煽って遊んでる訳じゃないぞ。 コンピュータにとって、言うは易いが行うは難しい要求なんだ。
599 名前:586 mailto:sage [2009/01/29(木) 01:12:20 ] レスありがとう では郵便番号か都|道|府|県|市|区|町|村のある行から 5行以内にある行で、末尾に。や、のない7文字以内の行で その行の中には、も。もない文字列 これを抜き取ったら名前の可能性が高そうなのですが どうやって書けば良いでしょうか
600 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 01:52:27 ] >>599 それは非常に喜ばしいけれど、名前じゃないものが抽出されたり、名前が抽出されなかった時に どうするか考えてるの? そのデータをどうやって作ってるのかよくわからんが、ごちゃごちゃしたテキストしか存在しないの?
601 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 01:57:10 ] 人名で7文字制限つけていいのかなぁ。外国人名なんか来た日にゃえらいことになりそうだが。
602 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 09:57:27 ] >>599 正規表現ってのは、 人間が生活しながら身に付ける区別みたいに複雑な物じゃなく、 字面だけで機械的に振り分けする物。 それが可能なデータでないなら、正規表現での抽出は諦めた方がいい。 既存のデータなら仕方ないけど、何等かの方法で生成してる物なら、 その上流で手を打たないと難しい。
603 名前:586 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:15:33 ] うざいので他所言ってください
605 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:33:20 ] >>603 パターンが一定ではないので無理。
606 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:35:34 ] とりあえず、「住所は必ず数字で終わる」のなら、 ^(\D+)\d で引っ掛けられそうか。
607 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:36:39 ] >>603 人名なんて住所より短いんだから、行頭から全角6文字以内+行末文字の抽出で十分じゃない。 はい終了。
608 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:43:23 ] まあそれでも半分ぐらいは抽出できそうだわな
609 名前:586 mailto:sage [2009/01/30(金) 00:02:42 ] こんにちは とかが頭にある場合があるので郵便番号と都道府県のチェックは外せないです。
610 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:07:35 ] ネタじゃないの?
611 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:10:28 ] データごとの固まりは空行で区切られてたり 行数が決まってたりすんの? それだったら名前候補を抽出するプログラムも結構簡単に作れそうだが 全部正規表現でやるのは逆にむずそう
612 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:13:59 ] >>609 そのレベルになってくると、正規表現よりそれを扱うスクリプトの方でどうにかしたほうがいいのでは そもそもどういう形式のデータかも想像できないし
613 名前:586 mailto:sage [2009/01/30(金) 00:16:01 ] ネタじゃないです データは一つはj一人のデータです。 複数の人の切り分けは考慮する必要なないです。 やっぱ難しいですかね
614 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:25:56 ] >>613 いやもう本気で「日本語でおk」 どんなデータか説明してもらわないと、どうもこうも無いわ。
615 名前:586 mailto:sage [2009/01/30(金) 00:44:15 ] わかりにくくてすみません。 自由なフォーマットで送られてくる住所氏名電話番号を ListViewに登録するということをやっています。 文章は こんにちは 私の住所は 123-0001 東京都**区**町10-10 日本太郎 03-0000-0000 です お返事ください。 こんな感じの文章から名前を出来るだけ高確率で取り出したいです。 段階に分けて調べた方がいいですかね 上の例だとまず郵便番号と都道府県と電話番号の位置を正規表現で探して それらに一番近い7文字の全角句読点なしを取るという感じでどうでしょうか 「です」が怪しいですね「になります」とか書いてあったら間違うし・・・
616 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:00:30 ] >>615 > 自由なフォーマットで って時点で、正規表現の領域じゃないと思うぞ。
617 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:01:54 ] 自由なフォーマットなのか、郵便番号に近いのと電話番号に近い奴が違った場合どっちを取る? とか問題があるな。 ttp://www2s.biglobe.ne.jp/~suzakihp/index40.html この辺から苗字のリスト拾ってきてそれが含まれてる行を抽出するとかでいんじゃね?
618 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:08:18 ] 人名辞書と突合せしないと絶対に無理だろ
619 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:15:22 ] 名前だけ抜き出すと考えるとまず無理 引っかからないのもNGだとすれば、全角と空白を一定以上含む行まで絞ってあとは目視しかない フリーフォーマットを許さないといけない特段の理由がないのであれば、フォームにするべき
620 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:30:30 ] 出会い系?
621 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:48:20 ] っつーか、“理系”の人間に任せろよ。
622 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 03:59:14 ] つーかそこそこの確率でいいなら、漢字だけで構成されてる行を 抜き出すだけでよくね?
623 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 04:18:16 ] 「できない」 ってハッキリ言ってやれよ。その方が質問主に対して親切だ。 こんなに引っ張るような事じゃ無いだろ。
624 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 05:24:29 ] だからネタでしょっていってんじゃん。 食いついたもん負け。
625 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 07:44:05 ] >>623 すると馬鹿は「知らないなら黙っててください」と言い出す
626 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 08:16:59 ] srud(>>625 );
627 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 19:17:21 ] >>625 人のことを馬鹿呼ばわりするあなたにはわかるんですか? わかる方のみ回答お願いします
628 名前:586 mailto:sage [2009/01/30(金) 20:15:38 ] レスどうもです。 漢字の数文字の行から取るというのはいいと思いますが 折角正規表現が使えるのだからそれと郵便番号と住所なんかを手がかりにしたい (その分確率は上がるでしょうし)と思ったのでお力をお借りできないかと このスレを訪れてみました。 ご指摘の無理というお話もわかりますがm住所、郵便番号...の条件について、 正規表現で書く書き方を教えて頂けると助かったのですが 範囲の指定とか除外とか色々あって難しくて・・・ ちょっとアプローチを変えて自分なりの方法でやってみました。 住所、郵便番号、電話番号の位置を調べて、それの平均値を出して それに一番近い7文字の全角でかつ、。や、のない行 から文字を取るようにしたら結構良い確率で抽出するようです。 正規表現とは離れた手法になってきたのでこの件はこれで終わりにしたいと思います。 お騒がせしてすみませんでした。有意義な回答を下さった方ありがとうございました。
629 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 20:42:45 ] >>628 確実に除外できるものを削除しなよ。 そうすれば全部の名前に少しのゴミを加えたものになるよ。
630 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:40:39 ] まだ引っ張るつもりか
631 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:13:49 ] <h1 class="title"> <a target="_self" class="id a " href="http://英数字.html"> パターンマッチング1</a> ・ ・ $pattern = "/ ( <h1.\s.class=\"title\"> <a.\s.target=\"\_self\".\s.class="id\s.a\s\" href=\"[0-9|a-zA-Z|\-|\:|\.|\?|\/|\_]+.\"> ) (.*?)(<\/a>) /"; こんなので全然マッチングできませんでした どこがまちがっているのか、おしえてください
632 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:30:33 ] >.\s. 任意の一文字+空白文字一文字+任意の一文字=計三文字 つまり"h1 class"とか"h1! ?class"とかじゃないと引っかからない。 h1とclassの間とかは「空白文字一文字以上」だから\s+でおk
633 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:31:19 ] >"h1 class" 2chの仕様でスペース一つに見えるけど、半角スペース三つね。
634 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 12:21:07 ] [ ]に | は使えないよ
635 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:38:00 ] 質問なんですが、4桁の数字の頭にAという文字を付けたい場合、 [0-9][0-9][0-9][0-9]をどうやって置換すればいいんですか?
636 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 13:53:10 ] $str ='123b2345'; echo preg_replace('/[0-9]{4}/','A$0',$str); -- 出力結果 -- 123bA2345
637 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:04:13 ] 正規表現関係ないじゃん…
638 名前:デフォルトの名無しさん [2009/01/31(土) 14:38:44 ] >>632-633 助言ありがとうございます、.を取り除き進歩しました 今度は $Pattern = "/([^<]h1*>[^a\s]*>)(.*?)(<\/a>)/"; のようにしてみたんですが、全然上手くいきませんでした
639 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:43:53 ] >>638 完全にスレ違いなので、お使いの言語のスレへいってくだしあ
640 名前:635 mailto:sage [2009/01/31(土) 15:09:36 ] 教えろ
641 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:37:42 ] >>640 >>1
642 名前:デフォルトの名無しさん [2009/01/31(土) 16:42:28 ] >>641 おまえ教えろ
643 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:53:04 ] >>642 >>1 >>636
644 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:31:16 ] 教えられてもそれが答えと気づかなかったでござるの巻
645 名前:デフォルトの名無しさん [2009/01/31(土) 17:38:44 ] ござる教えろ
646 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 00:07:27 ] www.pururu.co.jp/goods/item/430-0168/
647 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 00:42:14 ] >>646 つ それ「こざる」
648 名前:デフォルトの名無しさん mailto:ポルナレフの方がよかった? [2009/02/01(日) 01:09:08 ] 答えを教えられていることを伝えたら答えを教えろと言われたでござるの巻
649 名前:デフォルトの名無しさん [2009/02/01(日) 05:12:34 ] おしえろ教えろ
650 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 04:33:30 ] 教えろおしえろオシエロ、、、エロ!?
651 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 07:54:44 ] そこでこざるの出番でござるよ
652 名前:デフォルトの名無しさん [2009/02/03(火) 17:05:09 ] Perlの質問です。 .......<code>.......</code>...... ....<code>...........</code>...... こんな感じのドキュメントを、<code>または</code>の前で区切ってsplitで分けようとして 書きましたがうまくいきません。何が悪いのでしょうか。 @content = split( /(?=<(|\/)code>)/, $content);
653 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:17:00 ] >>652 たぶん空文字列や'/'が混じるのが御気に召さないのだろうと 思うがそれは君が (|\/) でキャプチャーしているからだよ。 いらなければ (?:|\/) とか \/? とかにするといい。
654 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:26:39 ] >>653 迅速かつ的確なアドバイス、ありがとうございます。上手くいきました。 意味はこれから勉強していきます。
655 名前:デフォルトの名無しさん [2009/02/04(水) 19:03:45 ] お願いします( ゚ω゚ ) 言語はC#を用いています。 正規表現にて [ok] 100 [ng] 01 → 1 [ok] 0.001 [ng] 00 → 0 [ok] 0.1000 前ゼロ入力をReplaceで""に置き換えたいのですが、正規表現が上手く書けませぬ 教えてくださいエロい人
656 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:29:16 ] 関口宏「ベジータさん、今までいろいろな敵と戦ってきましたね?」 ベジータ「ふん、ゴミに興味などない」 関口、リーダー『ゴミに興味などない』 ベジータ「な……なんだ貴様ら!?」 リーダー「そんなベジータさんにはこんな問題!」 関口宏「ベジータさんが戦った、ギニュー特選隊のメンバー、五人全員お答え下さいスタート!」 リーダー「走って!まだよまだよまだよどうぞ!」 ベジータ「ギニュー! グルド! えー……バータ! ……待てよ、ギニュー、グルド、バー……くそ、わからん! あっ、ザーボン! なにっ!? ドドリア! くそったれ! ギニュー! グル」 ブッブー! ベジータ「はぁ……はぁ……」 関口宏「リクーム、ジース」 ベジータ「あーリクーム……」
657 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:19:39 ] new Regex( @"^0+(?!\.)" ) でString.Emptyに置き換えてみたら でもこれだと000は""になっちゃうけど
658 名前:デフォルトの名無しさん [2009/02/04(水) 21:22:25 ] >>655 C#の構文は知らないのですが、 /^0+(\d)/$1/ に相当する正規表現でどうでしょうか
659 名前:デフォルトの名無しさん [2009/02/05(木) 10:33:34 ] >>657 >>658 ありがとう(・ω・) でもダメですた(;´Д`) ^0+(?!\.) 開始0の入力が不可ですた /^0+(\d)/$1/ $1がサポられてないですた お騒がせして申し訳ありませんでした。 もう少しイジくり回してみます。
660 名前:デフォルトの名無しさん [2009/02/05(木) 11:13:55 ] 秀丸エディタでの正規表現です。 abcdefghijxyz abcdefg xyzdefabc から1行の中にabcとxyzの両方を含む行(1と3行目)を検索したいのですがどのように書いたらいいですか? (.*abc.*xyz.*\n)|(.*xyz.*abc.*\n) 上のように書くとできるのですが含む文字列を増やした場合大変そうです。 本来はどのように書くのでしょうか教えてください。 簡単に&のような文字があるんでしょうか。
661 名前:659 [2009/02/05(木) 12:04:30 ] お騒がせしました(・ω・)出来まスタ スタ 解:System.Text.RegularExpressions.Regex(@"(^|(?=\.))0(?=[0-9])"); ありがとう御座いました。
662 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 13:24:20 ] >>660 www.din.or.jp/~ohzaki/regex.htm#And
663 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 14:27:14 ] >>660 ^(?=.*abc)(?=.*xyz).*$
664 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:37:08 ] テキストファイルの検索でファイル内に複数の単語があるかどうか検索するときには どういった感じにすればいいんでしょうか?
665 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:46:23 ] >>664 ttp://www.pururu.co.jp/goods/item/430-0168/
666 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:30:49 ] クラスの中でグループを使いたい場合はどうしたらいいですか? [123(456)] とした場合1/2/3/456にマッチする。
667 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 10:32:36 ] 中じゃなく外でやれ。 ([123]|456)
668 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 11:17:30 ] なるほろろ
669 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:05:59 ] いやん。中に出して!
670 名前:659 [2009/02/06(金) 18:08:08 ] >>667 悔しいけど感じちゃう ビクンッビクンッ
671 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:46:31 ] janeviewでwsh使用してますが、 2000にマッチして、DATE: 2000にはマッチしないようにしたいのですが どうしたらいいですか?
672 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:10:55 ] (?<!DATE:)2000 かな。たぶん・・・ >>2 の www.kt.rim.or.jp/~kbk/regex/regex.html#NEGATIVELOOKBEHIND を読んで。
673 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:14:47 ] おっと、WSH か・・・ダメかもしれないね。 if文で2重チェックすればいいんじゃない?
674 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:22:42 ] >>2 の .NET Framework 正規表現言語要素 msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp にちゃんと書いてあった。 .NET なら (?<!・・・・) が使えるみたいだけど、WSH はよくわからん。どこに書いてるんだろう・・・
675 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:28:02 ] WSH(JScript)の正規表現は↓でおk msdn.microsoft.com/ja-jp/library/28hw3sce.aspx
676 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:29:02 ] ググったら出てきた。 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化 msdn.microsoft.com/ja-jp/library/ms974570.aspx ここには (?<!・・・) は書いてない。 書いてないから出来ない、と考えるべきか、メンドクサイから書かなかったのか。 出来ることは書くが、出来ないことは書かない。フツウ、そうだよな・・・ ちなみに文書の日付は May 10, 1999 だ。 自分で実験してたしかめろや。
677 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:32:59 ] >>675 そっちのが新しい文書やね。やっぱり (?<!・・・) は書いてない。
678 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:42:20 ] 鬼車使えばいいじゃん
679 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 03:54:02 ] >>672-678 皆さんありがとうございます。 >>678 さん いつのまにか鬼車ってやつに変わってたんですね ヘルプの更新してなかったので気が付かなかったです。 鬼車にしたら>>672 さんのやり方で出来そうだったんですけど、 なぜか、「正規検索のテスト」のウィンドウ上だとうまく出来てるみたいなんですが、 実際に「ログから検索」にかけるとDATE: 2000が掛かってしまうみたいです。(でもハイライトされない) 結局、検索を本文のみに絞るオプションを発見して一応望む結果は出せたのですが、 何故そうなるのか、どうもしっくり来ないです… 逆に(?<=DATE: )2000でログ検索かけてみると今度は全くマッチしない状態になります。 でもテストウィンドウ上ではちゃんとマッチするんですよね…。 なんかおかしい気がします。Janeのバグなんでしょうかね?
680 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:12:26 ] hoge.net/dir/image/3 桁の数字/3桁の数字.jpgというURLがあります 最後の「3桁の数字.jpg」を抜き出した意のですが、どのようにやったら綺麗にかけますか? ヒントをください
681 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:16:20 ] /[0-9][0-9][0-9].jpg$/
682 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:41:09 ] /[0-9][0-9][0-9]\.jpg$/
683 名前:680 mailto:sage [2009/02/07(土) 20:52:29 ] わかりました感謝します
684 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:33:57 ] /\d{3}\.jpg$/
685 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 19:35:31 ] gawkの質問です。 村にはヒットさせたいが、川村とか大村とか村の前に特定の文字がついた場合にはヒットしたくない場合、正規表現ではどう書けばいいでしょう? /![川大]村/ とかでいいんでしょうか?
686 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:35:40 ] /[^川大]村/
687 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:52:07 ] ありがとうございました。
688 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 22:03:09 ] これだとただの「村」にはマッチしないんだよな
689 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 22:11:32 ] 正規表現は難しいからね。これ自体が一つのプログラミング言語と同等だし。
690 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 22:13:29 ] いや、それはない
691 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 01:21:53 ] /[^川大]村|^村/ これはどうかね
692 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 08:51:21 ] 後方一致 /(?<![川大])村/
693 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 09:55:50 ] gawkでって話だから戻り読みはなしだろう。
694 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:02:24 ] ●正規表現の使用環境 サクラエディタ v1.6.4.0 ●検索か置換か? 置換 ●説明 「 xml:space=preserve>」を検索のキーとして キーを含む行末までの文を置換したい ●対象データ <string1 xml:space=preserve> </string1> <string2 xml:space=preserve> </string2> ●希望する結果 <string1/> <string2/> よろしくお願いします
695 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:27:10 ] s/<[^>]*xml:space=preserve>//g、でどうかな。
696 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:01:41 ] * で貪欲マッチするとマズいか。 最初の文字が x だから、 s/<[^x]*xml:space=preserve>//g、でどうだ。
697 名前:デフォルトの名無しさん [2009/02/11(水) 13:40:25 ] >>694 s/<([^\s]+)\sxml:space=preserve>[^\n]+<\/\1>/<\1\/>/g でどうでしょう。
698 名前:デフォルトの名無しさん [2009/02/11(水) 13:44:59 ] s/<([^\s]+)\sxml:space=preserve>[^\r\n]+<\/\1>/<\1\/>/g 改行コードが文字コードによっていろいろなので少し修正 XMLが複雑な入れ子構造だとうまく動作しない場合がありえますが シンプルな構造で、閉じタグも同じ行にあるのなら大丈夫かも。 サクラエディタは持ってませんが()でのキャプチャは\数字で参照できるようですね。
699 名前:デフォルトの名無しさん [2009/02/11(水) 13:47:57 ] s/<([^\s]+)\sxml:space=preserve>[^\r\n]+<\/\1>/<$1\/>/g こういう風にも書けるのかな
700 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:55:48 ] Perl互換の正規表現に対応しているソフトで ab cd を検索するのに /ab.cd/m と書いたのにヒットしません。 /ab.*cd/m も /ab\ncd/m もダメです。バグでしょうか?
701 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:42:50 ] >>700 そのソフトの名前を出してくれないならどこまで互換性あるのかわからないし 作者かユーザーに聞けとしか。
702 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 17:15:32 ] >>700 ほんとうにperl互換なら、s オプションをつければいいと思う。 /ab[\r\n]*cd/s
703 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:09:38 ] >>701 このeDocArrangementというソフトです。業務用なので値段がすごいです。試用版で勉強中です。 OCR結果から顧客名を取り出す作業をしたいと思いまして。。。 www.technostyle.net/edocarrangement/ >>702 ありがとうございました。出来ました。 \nだけではダメなんですね。詳説正規表現を読み始めたところですが、そんなことは書いてないような気がします。 別の教科書を探すべきでしょうか?
704 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:12:36 ] >>703 \r\nなのはWindows環境だからじゃないの? それでもオープン時にテキストモード指定してれば\nでいいけど。
705 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:18:46 ] >>704 はい。窓です。正規表現の世界では異端なんですねw
706 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:28:21 ] そもそもそのデータはどうやって持ってきてるの? もしもデータがファイルにあって、ファイルオープンのコードを自分で書いたのなら そのパラメタが間違ってるよ。
707 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:46:37 ] >>706 OCRデータから目的のテキストだけを抜き出す作業です。 xdwファイルにOCRデータがありまして … 氏名 西村ひろゆき 生年月日 … というデータから名前を抜き出す作業です。 /氏名\n(.*)\n生年月日/m で抜き出せると思って試行錯誤したんですが、うまくいかなくて泣きついた次第です。 ファイルオープンのコードをかくという作業はありません。というか、低レベルなのでそういう高度な作業はよくわからない状態です。。。
708 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:52:31 ] >>703 もし、正規表現を使い始めたばかりなら、詳説正規表現はまだ読むべきじゃない。 読むならまず入門書から入るべきかと。
709 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:56:53 ] >>708 ありがとうございます。たしかに自分には早いのではないかという気がしていました。 はっきりと断言していただきありがとうございます。初心者用の教科書をAmazonで探します。 もしもお勧めがあれば、ご教示いただけましたら幸いです。希望ばかりで大変心苦しいのですが。。。
710 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:24:02 ] >>705 行の末尾がOSによって異なるんだよ。 \n だけのOS(うにくす系) \r だけのOS(りんご系) \r\n 両方必要なOS(まど系) (ここまでは、パソコンの基礎知識) この3種類に共通に使えるように [\r\n]* って書くんだよ。 (これは正規表現の応用問題。よく使う慣用句みたいなもの)
711 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:24:13 ] 自分はPerl本から入ったクチだけど、>>709 の場合、 Perlの処理部分については必要ないよね、おそらく。 特に正規表現に関して言うなら、試行錯誤して身につけたものの方が多い。 一番参考にしたのは秀丸のヘルプだったりする。 だから本を買う前に、Googleで正規表現を検索して、トップ30ぐらいまでの ページを順に読むほうがよいかと。 テキストエディタでの正規表現の利用方法を記載しているものもあるけど、 それらも基本は同じだから、まずそこでイメージを掴むべきかと。 本を買うのは、その後。、少しでも自分のイメージができた後で書店で中身を 確認して買うべきだと思う。 最近のテキストエディタは検索結果に一致する箇所にマーカーをするものもあるから、 それで勉強するのもベストかと。 自分が知っている分では秀丸とSakuraエディタ。それ以外にもあるとは思う。
712 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:34:50 ] 俺のオススメは >>2 のいちばん最初に書いてある 正規表現メモ www.kt.rim.or.jp/~kbk/regex/regex.html だな。
713 名前:694 mailto:sage [2009/02/11(水) 21:33:37 ] >>695-699 お答えいただき、ありがとうございました 早速試してみたのですが、検索に引っかかりませんでした…
714 名前:デフォルトの名無しさん [2009/02/11(水) 22:57:49 ] >>713 サクラエディタを使ったことないので、サクラエディタでの置換方法は分からないのですが <(\S+)\sxml:space=preserve>[^\r\n]*<\/\1> で検索にヒットしないでしょうか? あとは、それを <$1\/> に換えるだけですむのですが・・
715 名前:デフォルトの名無しさん [2009/02/11(水) 22:59:51 ] 714では、 [^\r\n]+ を [^\r\n]* にしました
716 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 23:28:16 ] っつーか、>>695 のsed式での回答ってどうなんだろう? 個人的には、環境に左右されないからアリだと思うんだけど。 スラッシュで囲むっていう知識は前提にしていいのかな?
717 名前:694 mailto:sage [2009/02/12(木) 01:29:13 ] >>714 出来ました!ありがとうございます! しばらく頑張ってたのですが、どうにもうまくいかず参ってたところでした 本当にありがとうございました!
718 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 02:18:07 ] >>716 まあ正規表現だってのをはっきりさせるのはいいと思うけど、 スラッシュ以外も区切りにできる(できないのもあるけど)というのを 知らない人がさらに増えるようなきがするのはやだなあ。
719 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 08:50:34 ] >>718 なんか論点が違う気も。
720 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 02:32:08 ] Firefoxのjavascriptを使って、 <div class="mori"> <h2>てすと</h2> <img src="./test.gif"> </div> <div>わわわ</div> のようなHTMLからclassがmoriの上四行の部分を抜き出したいのですが、正規表現を <div class="mori">(.|\n)*<\/div> とすると最後の<div>わわわ</div>まで入ってしまいます。 次に <div class="mori">[^(</div>)]*<\/div> を試してみたのですが、これもうまくいきません。 角カッコの中は丸カッコで囲んでも無視されて一文字ずつに分解されてしまうようです。 どうすればいいんでしょうか?
721 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 03:26:11 ] >>720 *や+は最も長く貪欲にマッチしようとするから、最後の</div>にマッチする。 *や+の直後に?を付ければ最小マッチになってできる限り短くしようとするから 望むような結果になるはず。
722 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 10:14:34 ] JavaScriptならDOMで操作しないさいよ…
723 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:04:39 ] >>721 おおおおお!まさにこれを求めていました! いろんな場面で使えそうでとても助かります。どうもありがとうございます。 >>722 それがGM_xmlhttpRequestで得る値なので、全部テキスト形式になってしまうのです。
724 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:09:33 ] phpで正規表現を使うかプログラムでゴリゴリ書くか迷ってます やりたい事は、見出し語:[発音,][定義1][,"例文1","例文2",...][ *注記][; 定義2...]みたいな テキストを分解して各(配列)変数に設定する、みたいな事なのですがpreg_match_allみたいな関数で この程度なら実現可能そうでしょうか? 既に結構時間を使ってるので見込みが無さそうならサッサと見切りを付けたいのですが…
725 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:51:03 ] 全部ちゃんと分割できるよ
726 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 13:28:57 ] うっ…出来るんですか。(まだ定義の分割すら碌に出来てない…) もう少し頑張ってみます
727 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 20:45:00 ] [*]の[]を普通の文字として扱いたいときどうすればいいんですか? \[*\]だと無理ですよね
728 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 20:49:38 ] ふつうは \[*\] でいいんだよ。ふつうは。
729 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 20:59:08 ] そうですか・・・ \[*\]だと]しかクォートされないので・・・
730 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:21:17 ] [[]*\]
731 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:40:27 ] やはり]だけでした
732 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:45:24 ] それをどうやって確かめてるんだ
733 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:53:05 ] アナログ放送をIEPGで登録すると[S]や[字]といった文字が名前に付きこれが邪魔なのでリネームしたいんです たとえばファイル名[S][字].avi s/\[S\]// してやるとファイル名[字].avi となりますが s/\[*\]// とするとファイル名[S[字].avi といった感じになります
734 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:57:33 ] >>733 頭悪いのに勝手に自分で問題を切り分けずに、最初からそれをいえよw *の使い方しらべとけ
735 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:00:07 ] わからないんですね すいません
736 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:00:43 ] 「頭悪い」なんていきなり何様ですか わからないならわからないと言えばいいじゃないですか
737 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:17:22 ] どっからどう見ても最初に質問した奴と途中の奴が別人w
738 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:19:09 ] s/\[*m9(^Д^)\]//
739 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:28:42 ] s/\[..*\]//
740 名前:デフォルトの名無しさん [2009/02/14(土) 23:26:05 ] >733 横レス失礼します。 s/\[[^\]]*\]//g これでどうでしょうか?
741 名前:デフォルトの名無しさん [2009/02/14(土) 23:33:42 ] >>733 s/\[.*?\]//g これでも大丈夫でしょう。 最短マッチに対応している正規表現エンジンの場合は。 *や+は条件に合致しつつできるだけ多くの文字を消費するような選択をします。 *?、+?は最短マッチといって、その条件を満たす最短の場合が選ばれます。 想定される用途では否定の文字クラス [^いろいろな文字] を使うか 最短マッチの .*? を使われると良いとおもいます。 別の表現なら否定先読み (?!文字列) をつかっても長くなりそうですが書けます。 ご参考になれば幸いです。
742 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 10:10:19 ] >>733 最初からそれを書け。 コミュニケーション能力不足。 人間相手にコミュニケーションできないで コンピュータ相手のコミュニケーションが出来ると思うのか? s/\[[S字]\]//
743 名前:デフォルトの名無しさん [2009/02/15(日) 15:20:54 ] 補足です。 >>741 の正規表現は*の前に見づらいかもしれませんがピリオド.があるのでご注意ください。 >>733 の正規表現 /\[*\]/ にヒットする文字列はたとえば ] [] [[] [[[] [[[[] [[[[[] になります。
744 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 17:02:57 ] いくらなんでも初歩で躓きすぎだろ 質問に無関係な知識押し付けてる方もひどいが
745 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:02:06 ] >>742 が一番馬鹿に見える
746 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:17:40 ] キラーパスだな
747 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:22:04 ] >>742 はネタだろJK
748 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:12:37 ] ++とか(?>)とかのpossessive quantifierってどういうときに使ったっけ? あれば便利そうは気はするし、実際なんかで使った記憶はあるんだけど思い出せない
749 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 18:05:15 ] わからないから聞いてるならまだしも、忘れたから聞いてるってのはそれこそググレば?
750 名前:デフォルトの名無しさん [2009/02/19(木) 20:45:50 ] すいません質問させてください @/home/test/hoge/test/test.txt A/home/test/hoge/test/document.txt ↑のパスがありまして、そこからtestで検索をすると @のtext.txtのみが該当する正規表現ってうまく出来ないものでしょうか? ファイルまでの途中のパスは含めないで最後のスラッシュ後のファイル名のみ 検索対象としたいのですが悩みまくりです・・・ イメージ的にはエディターでの正規表現で@のみ該当させる感じです。 どなたかご教授願えないでしょうか?
751 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 20:58:11 ] C#を使っています string か strin か stri か str か st か s にマッチするパターンを今は↓のように書いているんですが ^s(t(r(i(n(g)?)?)?)?)?$ もっと分かりやすい書き方ってありますか?
752 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:42:23 ] >>750 検索キー 「test.txt」
753 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:44:47 ] >>750 /([^\/]+\/)*(.*)/ で、\1がパス、\2がファイル名。
754 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:54:31 ] >>750 秀丸エディタなら↓これでいけた。他は知らん (?<=.+/)test
755 名前:デフォルトの名無しさん [2009/02/19(木) 22:57:56 ] >>750 test\.txt$ でどうでしょう
756 名前:デフォルトの名無しさん [2009/02/19(木) 22:59:13 ] >>750 少し修正 test\.txt[\r\n$]
757 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 23:00:16 ] ひどくなってるYO
758 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:01:43 ] test\.txt(?=$|\b|[\r\n])
759 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:53:45 ] YoutubeをダウンロードするFirefoxのuserchrome.jsスクリプトの一部なんだけど var[ \r\n\t]+swfArgs[ \r\n\t]*=[ \r\n\t]*\{(.*,|)[ \r\n\t]*(t|'t'|"t")[ \r\n\t]*\:[ \r\n\t]*['"]([a-zA-Z\-_0-9]+=)['"].*\} の(.*,|)の意味するところがわからない。 ↑ |って○○か××を意味するメタ文字じゃないの?なんで)の直前にあるんだろう?
760 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 03:00:42 ] (foo|) は (foo)? と同じ意味では。
761 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 03:13:23 ] .*0か1個以上ある?じゃあ.+と同じ?
762 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 08:04:22 ] はあ?
763 名前:750 mailto:sage [2009/02/20(金) 08:57:02 ] みなさんレスありがとうございます 例えが悪かったですが実現したいのはデスクトップの検索エンジンでのファイル名検索でファイル名のみで検索したいのです。 みなさんのレスを参考に思考錯誤してみます
764 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 20:27:44 ] >>759 "t": "([^"]+)" 俺は、これで済ませてるw
765 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 21:39:41 ] すみません(foo)?の意味がわかりません教えてください >>764 それでいけるよねw
766 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 21:02:25 ] >>751 C#なら s.Length > 0 && "string".StartsWith(s) のようにやればいいのに。
767 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:43:45 ] 女のコの性器表現てどれくらいの種類があるんだろう
768 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:56:18 ] 単語だけならともかく、そんなのは文脈によって変わるし、 『×××』だけでもそれを表すことができる上に、『大事なところ』などボカした表現までスコープを広げると とても現代の正規表現で賄いきれるものではない。 言語学の分野で議論してくるがいい。
769 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:45:51 ] C#でWBCかワールド・ベースボール・クラシックのどちらかを含み、かつイチローか松坂のどちらかを含むline、と正規表現で if (Regex.Match(line,"(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)").Success) と書いてみたのですが、いまいちうまくヒットしないです。アドバイスお願いします。
770 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:15:33 ] 正規表現の中に && とか画期的すぎるだろ・・・ テンプレの正規表現講座でも見ておいで
771 名前:751 mailto:sage [2009/02/24(火) 22:56:03 ] >>766 確かにその方がわかりやすいですね ありがとうございます
772 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 10:58:18 ] if (Regex.Match(line, "(WBC|ワールド・ベースボール・クラシック)").Success && Regex.Match(line, "(イチロー|松坂)").Success) でいいんじゃね?C#知らないけど。 AND増えるなら条件を配列に入れてループで。
773 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:46:56 ] line = "ぽにょワールド・ベースボール・クラシックぽにょイチローぽにょ" Set RegExp1 = new RegExp Set RegExp2 = new RegExp RegExp1.Pattern = "WBC|ワールド・ベースボール・クラシック" RegExp2.Pattern = "イチロー|松坂" If RegExp1.Test(line) And RegExp2.Test(line) Then Wscript.Echo "うんこ" End If
774 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:49:30 ] >>772 Regex.Match の使い方が間違ってる。ちゃんと説明書読んだ?
775 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 14:22:03 ] C#知らないと言っている人にそんな指摘してもなあ
776 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:22:22 ] C# カンケーない。Regex.Match の使い方が間違ってる。
777 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:42:59 ] >>769 >>772 if (Regex.Match(line, "WBC|ワールド・ベースボール・クラシック").Success && Regex.Match(line, "イチロー|松坂").Success) で良いが、IsMatchのほうが良さげ。 if (Regex.IsMatch(line, "WBC|ワールド・ベースボール・クラシック") && Regex.IsMatch(line, "イチロー|松坂"))
778 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 19:33:25 ] 少しお聞きします。 1hage(100禿) 1hage(10毛) 1hage という文字列があった場合に、1hage(100禿)以外をマッチさせたいのですが、 なかなかうまくいきません。 どのように正規表現を書いたものでしょうか?
779 名前:778 [2009/02/27(金) 19:34:25 ] >>778 すいません。追記です。 具体的には、"hage"をヒットさせたいのですが、"禿"を含むもののみマッチさせないようにしたいのです。
780 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 19:36:03 ] 1hage にマッチしたものから 1hage(100禿) にマッチするものを取り除く、 じゃダメなのか? どうしても1個の正規表現でやんないとダメ?
781 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:30:52 ] >>780 うん、やっぱりそれの方がスマートでよいですよね・・・ わかりました。 無理に正規表現だけでやらないとことにします。 ありがとうございました。
782 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:16:03 ] 文章中に「A」と「AA」が混在していて、 1文字だけの「A」を2文字の「AA」にします。 2文字以上連続していない、1文字だけの「A」は どうやったら探せますか? /A{1}/ でも駄目ですし、/A[^A]/ だと 行の中に A しかない物が引っ掛かりません。
783 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 16:40:50 ] D:\jspsh>jspsh.exe js> "A AA AAA".replace(/(^|[^A])A([^A]|$)/g, "$1AA$2") AA AA AAA js> :q Leaving "JScript Power Shell"
784 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 21:51:49 ] タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ
785 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:10:33 ] >>783 ありがとう、試してみます。
786 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:45:20 ] /(?<!A)A(?!A)/
787 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 00:28:35 ] <A href="○○○○○○○">●●●●●</a> と <A href="○○○○○○○"><hogehogetag>●●●●●</hogehogetag></a> という文字列から●●●●●を取り出したいのですが どうやって書いたら良いか教えてケロ 決まってるのは<A href="○○○○○○○">の次の<>の外の文字列ということです。
788 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:14:08 ] >>5 みたいに書けばいいよ
789 名前:デフォルトの名無しさん [2009/03/12(木) 17:29:29 ] 「から最初の」までってどうやって抜き出すんですか?教えてください
790 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 17:40:07 ] 「[^」]*」
791 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 17:53:29 ] ありがとうございました
792 名前:デフォルトの名無しさん [2009/03/13(金) 00:14:55 ] SQL(SELECT、UPDATE、INSERT、DELETEが不明)から、 テーブル名をマッチさせる正規表現が解る方、どなたかいらっしゃらないでしょうか? ひとつの表現で不可能なら、複数でもいいのですが…(´・ω・`)
793 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 00:25:51 ] SQLの構文解析は正規表現じゃ無理
794 名前:デフォルトの名無しさん [2009/03/13(金) 01:07:40 ] 金額の文字にマッチするにはどう書けばよいですか? 123,456,789 ←こういうの
795 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 01:20:24 ] \d{1,3}(,\d\d\d)* かな
796 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:53:14 ] 複雑な正規表現のテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。
797 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 08:57:59 ] 製品名を「鼻から悪魔」にしておけば何も問題は無い
798 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:11:43 ] >>796 私も以前、このスレではない所で同様の質問をしたが、真面目な答えは 返ってこなかったよ。正規表現から見るとプログラムテストは鬼門かもね。
799 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:21:24 ] 複雑なC言語プログラムのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なjavaのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なPHPのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なバッチファイルのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 複雑なExcelマクロのテストってどうすればいいんだろうね。 自分に都合のいいデータだけ作ってやってるけど。 実際は何が起こっても仕方ない場合が多いのだが。 ・・・正規表現に限った話ではない。 >自分に都合のいいデータだけ作ってやってるけど。 問題の原因がハッキリわかってるじゃないか。それを対処すればいいじゃないか? 自分に都合のいいデータを作ってしまうのが問題なら、他人にデータを作ってもらえばいい。
800 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 12:42:08 ] >>796 やったことはないが、本気でやるなら、こんな感じになるんだろう。 1.マッチすべきパターンについて構文木を作る 2.構文木を元に直交表を作る 3.実験計画法でテストケースを作る 4.テストケースをテストプログラム化する
801 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 14:59:43 ] >>799 プログラム言語の場合はステップごととか、プロセジャーや 関数に分割してテストするし、型も助けになる。 正規表現の対象としているのは文字列でここから先は構文解析 しかない。複雑な組み込みシステムの入口、出口でどんな テストデータを用意すればよいかというのと類似した問題だ。
802 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:26:09 ] www.honya-town.co.jp/hst/HTdispatch?isbn_cd=4062574993 上記のwebページから以下の「マンガホーキング入門」の部分を取り出したいのですがうまくいきません <tr> <td bgcolor="#efefef" width="15%" align="center" nowrap><small> 書 名 </small></td> <td width="85%"><font color="#333399" size="+1"> <strong> マンガホーキング入門 </strong> </font></td> </tr> "<strong>(.+?)</strong>"だとここ以外の強調部分もマッチしてしまうので "書.*?名.+?<strong>(.+?)</strong>"のようにしたのですがこれだとひとつもマッチしてくれません どのようにするべきなのでしょうか?
803 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:28:20 ] あれ、書 名 の部分は実際は書&nbsp;&nbsp;名です(&=>&)
804 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:36:57 ] 自己解決しました 「.」は\nを含まないのでだめだったようです "書.*?名.+?\n.+?<strong>(.+?)</strong>"でいけました スレ汚しすみませんでした
805 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:51:43 ] JavaやC#に正規表現のコンパイル機能があるけど、あれって意味あるのかな? いつも可読性を優先してRegex.Match(data,pattern)みたいに直接使ってるんだけど、 コンパイルが必要になるほど性能が必要な正規表現ってどんなのがあるん?
806 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:00:44 ] >>805 一般論的に正規表現のコンパイルというと、何度も同じ正規表現を 使うときに差が出る。 それが有意な差になるかはプロファイル取ってみないとわからないけど。 ところで可読性なら生の正規表現よりも定数とかに入れて 名付けた方がいいんじゃない?めんどくさいけど。
807 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:06:30 ] >>805 perlでo使ったらうれしいときと同じだよ。
808 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:09:58 ] >>806 >ところで可読性なら生の正規表現よりも定数とかに入れて >名付けた方がいいんじゃない?めんどくさいけど。 コード体系とかのパースの場合は定数化してるよ。 "Key: Value"なデータのパースとかはハードコードかな。 わざわざファイル移動で確認させる価値もないし。
809 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 02:47:41 ] ルールを変更可能にするため外部化、ってのもよくあるパターンだと思うけど。