• 締切済み

指定範囲内の削除

データをまとめる必要があったので正規表現を使える秀丸で挑戦していたのですが、どうにもできませんでした。 他に正規表現に強いPerlを使用していているのですが、うまく動いてくれません。 ファイルの読み込みから、結果の書き出しまでは様々な場所を参考にしてできたのですが、条件の指定がうまくいきません。 例 『カテゴリ1』...%E9gfdadas879gdsa\tmpフォルダ\1114-2-346\1051.doc データとして必要なのは『カテゴリ1』と最後の1051.txtなのですが、指定した以降の文字列を削除する方法で『カテゴリ1』だけは取り出せるのですが、後の1051.docの部分をどう指定したら言いの判りません。 %Eから始まる文字の羅列は1114-2346までは同じなのでできれば一辺に指定してしまいたいと思っています。 初歩な質問でしょうかよろしくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

#2さんの流用 use utf8; binmode STDOUT,":encoding(cp932)"; my $input = '『カテゴリ1』...%E9gfdadas879gdsa\tmpフォルダ\1114-2-346\1051.doc'; if( $input =~ m/(『.+?』).*\\([^\\]+)$/ ) { ($category, $filename) = ($1, $2); print "$category\n$filename\n"; }else{ die('入力がおかしいよ。');

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

例は、本来、説明文の理解を助けるための補足情報。 質問する時は、「例をもって説明に代える」はやめましょう。 回答者にストレスを与えます。 use utf8; my $input = '『カテゴリ1』...%E9gfdadas879gdsa\tmpフォルダ\1114-2-346\1051.doc' if( $input =~ m/『(.+?)』.*([^\\]+)$/ ) { ($category, $filename) = ($1, $2); }else{ die('入力がおかしいよ。'); }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず数行でいいので, 完全なデータと「どれを取り出したいのか」を書いてもらった方がいいかな. /(『.*?』).*1114-2356\\(.*\.doc)/ とかで取り出せるかもしれんけど.

関連するQ&A