• 締切済み

perlの正規表現について

perl初心者です。 早速ですが質問です。 複数のファイルが存在するフォルダ内にて、「~.abc.txt」というテキストファイルのみを 読み込みたい場合はどのように指定すればよいのでしょうか。 #open (F,○○)という表記になるかと思うのですが、 #適当な正規表現が分からず苦労しております。 お分かりになる方いらっしゃいましたら、ご教授してくださいませ。 以上です。 宜しくお願いいたします。

  • Perl
  • 回答数3
  • ありがとう数1

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

正規表現を使うなら、 opendir →readdirでファイル名ディレクトリ名取得 →-f でファイルか判定 →正規表現で対象か判定 でしょうか。 バイナリファイルを開くだけならエラーにはなりません。>#2さん テキストとして意味のあるデータ列になっているものを特に「テキストファイル」と呼んでいるだけですから、 結果が期待通りでない、というケースはありますが。

  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.2

とりあえず、 my @my_file_list = glob "*.abc.txt"; ~こんな感じで「.abc.txt」と言う文字列でファイル名が終わるファイルの一覧が取得可能。後はこれを適当に加工して使います。配列「@my_file_list」に該当するファイル名の一覧が格納されています。 ## ファイル一覧の表示サンプル ## foreach (@my_file_list) { print "$_\n"; } P.S. Perl環境で、対象ファイルが厳密にテキストファイルか否かを確認する事は非常に難しいので。単純に拡張子のみで判断するしか無いと思います。何らかの要因で、バイナリファイルを開いてしまった場合、エラーになります(基本的には回避不能?)。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

正規表現としては、 /\.abc\.txt$/ です。 ただし、openで一発というのは無理。フォルダのファイル一覧を glob で取得して、そのファイルを一つずつ順番にopenしていくという流れになります。 ちなみに、glob で指定するのは正規表現ではなく、シェルのファイルマッチなので、"*.abc.txt" になります。

関連するQ&A

  • perlの正規表現で...

    perlの正規表現で... abc (123) abc(123) からabcだけを取り出したいのですが、どのような正規表現になりますでしょうか? よろしくお願いします。

  • Perlを使った正規表現について

    テキストファイルを読み込んで、以下のルールに従った文字列だけを.txtで出力するプログラムを書いています。 具体的にはテキストファイル中の "text":"★★★","to_user" で囲まれている★★★の部分のみを抽出したいです。 そこで正規表現に触りだしたのですが、表現がうまくいっていないようで1週間ほどはまっています。。うまく出力できるように直しをいただけないでしょうか。 打ち明けてしまうと、★★★の部分はtwitterの呟き(日本語)になります。 以下がそのソースになります。よろしくお願いします。 print "Input file name: "; $ifname = <STDIN>; open(IN, $ifname); open(OUT, "> out.txt"); #出力ファイル while(<IN>){ if($ifname =" m/"test":(.*?),"to_user"/; next if($_ eq ""); print OUT "$_\n"; #書き出し } close(OUT); close(IN);

    • ベストアンサー
    • Perl
  • perl 正規表現 抽出

    perl の正規表現を用いて、文字列の抽出を行いたいのですがどのように 書けばいいのかわかりません。 実現したいことは 「Y:/フォルダ名/フォルダ名/ファイル名.拡張子」 というテキストに対して 「拡張子」のみを抽出することと 「ファイル名」のみを抽出することです。 パターンマッチや変換はなんとなくわかるのですが 抽出の仕方がよくわかりません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • (?:系の正規表現

    perlの正規表現で以下の意味は、ABC01かABC99のみマッチするということでよいでしょうか? /^ABC(?:01|99)$/ (?:は$1など使用しない場合に用いるで正しいでしょうか? (?系の正規表現について知識不足ですが、一覧や詳しい書籍がありましたら教えてください。 昔、 /^ABC01|99$/ とかいて、ABC99がマッチせず、99がマッチしたので、|を使うときは、()を書いたのですが$1など変に作用させたくなかったので、最近(?:系の存在を知ってもっと詳しく知りたくなりました。 (?:はPerlの正規表現特有のものでしょうか?

    • ベストアンサー
    • Perl
  • perlの正規表現について教えて下さい。

    perlの正規表現について教えて下さい。 【1】next if /^abc¥[1|2|3|4¥]/; 【2】next if /^abc¥[¥[1-4¥]¥]/; 例えばですが、 abc[1] abc[2] abc[3] abc[4] だった場合、next ifでスキップしたいと考えています。 【1】の場合、成功しましたが、【2】だとスキップされませんでした。 abc[ ではじまり、その後ろが「1、2、3、4」のいずれかで、]で閉じる場合、 スキップしたいと考えています。 【1】の場合、現在は[4]までだけですが、これが、[1]から[100]まであった場合, 1|2|3・・・99|100のように記述する事になってしまいますので 困っております。

    • ベストアンサー
    • Perl
  • 正規表現で先頭の一文字を消したい

    カレントのファイルリストを作りたいのですが、 どうすればいいかわかりません。 find . -type f > list.txt のようにしたのですが、 これだと ./abc/def/grt.txt のようになり、この先頭の"."が邪魔です。 正規表現を使えばいいのかと思ったのですが、 よくわかりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 正規表現教えてください。

    正規表現を教えてください。 YYYYMMDD_aa._aa_bbb.txt とあったとき YYYYMMDDは日付をあらわし, aa._aaはサーバ名をあらわして bbb.txtはファイル名をあらわすとき YYYYMMDD aa._aa bbb 値は変化するものでYYYYMMDD_サーバ名_fail.txtは変わらないとした時 それぞれをあらわすperlでの正規表現を教えてください。 まとめてあらわすのではなく、ひとつずつを表す方法でお願いします。

  • 正規表現で絶対パス表示のファイル名からファイル名だけを削除したい

    Perlの正規表現を使って c:\xxxx\xxxx\xxxx\xxxx\abc.txt のようにファイルの絶対パスで記述されている文を c:\xxxx\xxxx\xxxx\xxxx のように ファイル名部分だけを削除して、 フォルダの絶対パスに 表示させる正規表現を教えていただけないでしょうか? ちなみにxxxxは可変値、階層の深さも決まっておらず、 ファイルの拡張子もtxt,htm,拡張子なしなどです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 正規表現について

    以下のようなファイル名にマッチする正規表現は [ファイル名] 20080303_001test.txt 20080303_002test.txt [正規表現] ^20080303_(001|002)test\.txt$ であってますでしょうか。 ※特に()内の、"001"と"002)test\.txt"のどちらかにマッチすれば良いという条件になってないか心配です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Perl 正規表現などを使って文字を分割したい

    Perlを使って、下記データを分割したのですがうまくできません。 多分、正規表現などを使うとできそうな気がするのですが、分かりませんでした。 1つだけでも大歓迎ですので、できる方、教えてください。 特に、最初の2つだけでもできればとても、助かります!! 何卒、宜しくお願い致します。 ちなみに、文字コードは、UTF-8です。 分けたい組み合わせ(文字数が変わってもある程度汎用性があると助かります) ======== 漢字+数字 英字+カタカナ 漢字+数字+英字+カタカナ 例: ======== 表現100 Abcテレビ 非営利99AbcFFテレビ 日本語テキスト 出来上がり例: ======== 表現 100 ABC テレビ 非営利 99 AbcFF テレビ 日本語 テキスト

    • ベストアンサー
    • Perl

専門家に質問してみよう