- ベストアンサー
正規表現で絶対パス表示のファイル名からファイル名だけを削除したい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
最下行しか変換されないということですが、 $file='C:\xxxx\xxxx\xxxx\xxxx\abc.txt<改行>C:\yyyy\yyy\yyy\def.htm<改行>D:\zzz\ghi.doc' みたいな形でデータが入っているのではないかと思います。(改行入っているかどうかまでは判断できませんが) もしそうであれば、 $file=~s/\\[^\\]*\r/\r/g; で解決すると思います。
その他の回答 (3)
- iichiho
- ベストアンサー率37% (416/1114)
正規表現でということですので、下記のようになります。 $file='\xxxx\xxxx\xxxx\xxxx\abc.txt'; $file=~s/\\[^\\]*$//;
補足
上記実行すると C:\xxxx\xxxx\xxxx\xxxx\abc.txt C:\yyyy\yyy\yyy\def.htm D:\zzz\ghi.doc が C:\xxxx\xxxx\xxxx\xxxx\abc.txt C:\yyyy\yyy\yyy\def.htm D:\zzz のように最下行のものしか変換されません。
- Dpop
- ベストアンサー率51% (279/544)
こんなか感じではどうでしょうか? #!/usr/bin/perl $t = 'c:\xxxx\xxxx\xxxx\xxxx\abc.txt'; if ($t =~ m/([a-z:\\]+)\\[a-z\.]+$/) { print $1. "\n"; }
補足
Perl自体入っていないのでこの方法はできないです。 1文で正規表現化する方法はないでしょうか?
- qaaaq
- ベストアンサー率10% (2/19)
PerlならFile::Basenameモジュールを使うと自分でコーディングを行わなくてもそのような処理ができますよ
補足
Perlの正規表現と書いたのですが、 実機にはPerlが入っていないのです。(入れられない) Perlの正規表現でファイル内の文字列をGREPするツールを使うために、 Perlの正規表現で記述しないといけないのです。 なのでモジュールを使う方法は使えません。
関連するQ&A
- 絶対パスからのファイル名の切り離し
VC++6.0でCのコードを書いています。 絶対パスからのファイル名の切り出し方に関して質問です。 FILEPATH="C:\TEST\test.txt" というファイルがあるとして "C:\TEST"と"test.txt"の部分を切り離したいと思っています。 フォルダ位置は可変("C:\TEST\TEST"が来ることもある。) このときに FILEPATHの先頭アドレスから最後まで \マークがいくつ来ているか判断して 最後の\マーク以降とそれ以前を strcpyなどでコピーすればできると思うのですが、 この際、 1.\マークの数を数える 2.最後の\マークの手前までパス名をコピー 3.最後の\マーク以降をファイル名としてコピー という作業が必要になると思いますが もっと簡単に行う方法があればお教えいただければと思っています。 (標準関数を使用して・・・など) よろしくお願いします。
- ベストアンサー
- C・C++・C#
- パスからファイル名を取り出すには?
ファイルのアップロードの際、パスからファイル名のみを取り出そうと思ったのですが、Shift-JISの、エスケープ文字(日本語のファイル名の場合)の関係で困ってます。 具体的には $path = "C:\\temp\\表\示.txt"; という$pathから、 表示.txt のみを取り出したいということです。 $path =~ tr/\\/\//; $path = substr($path,rindex($path,"/")+1); や use File::Basename; $path = fileparse($path); などなど、いろいろやってみたのですが、 示.txt となるものしか見つかりませんでした… 速度や環境依存の関係のため、モジュールや、外部スクリプト、正規表現はあまり使いたくないのですが、何か良い案はないでしょうか?
- 締切済み
- Perl
- 正規表現でファイル名の抽出
社内の掲示板に属するWebアプリケーションを制作しております。 複数のファイルをアップロードするために、<input type="file" ...> で得たファイルのパスを一時的にリストに表示させる仕様になりました。 そこで、javascriptの正規表現オブジェクトで次のようなフルパスから ファイル名のみを抽出することを考えました。 a: c:\hoge.txt b: \\foo_server\foo_dir\hoge2.txt a,bから、それぞれ hoge.txt hoge2.txt を得るために、/[^\\].*/によって \\を取り除いた後で/\\.*\..*$/ によって欲しい文字列が得られると考えましたら文字列どころか何も 得られませんでした。 /[^\\].*/までは動いているようです。 オブジェクトの使い方が誤っていると考えているのですが、どの様に 扱えばよいのか皆目見当がつかなくなりました。 大変お手数ですが、ご教示願います。
- ベストアンサー
- JavaScript
- perlの正規表現で...
perlの正規表現で... abc (123) abc(123) からabcだけを取り出したいのですが、どのような正規表現になりますでしょうか? よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- perlの正規表現について
perl初心者です。 早速ですが質問です。 複数のファイルが存在するフォルダ内にて、「~.abc.txt」というテキストファイルのみを 読み込みたい場合はどのように指定すればよいのでしょうか。 #open (F,○○)という表記になるかと思うのですが、 #適当な正規表現が分からず苦労しております。 お分かりになる方いらっしゃいましたら、ご教授してくださいませ。 以上です。 宜しくお願いいたします。
- 締切済み
- Perl
- 正規表現教えてください。
正規表現を教えてください。 YYYYMMDD_aa._aa_bbb.txt とあったとき YYYYMMDDは日付をあらわし, aa._aaはサーバ名をあらわして bbb.txtはファイル名をあらわすとき YYYYMMDD aa._aa bbb 値は変化するものでYYYYMMDD_サーバ名_fail.txtは変わらないとした時 それぞれをあらわすperlでの正規表現を教えてください。 まとめてあらわすのではなく、ひとつずつを表す方法でお願いします。
- 締切済み
- Perl
- バッチファイルでパスとファイル名を併記した一覧を書き出したい
バッチファイルでパスとファイル名を併記した一覧を書き出したい いつもお世話になってます。また相談させていただきたいです。 下のようにバッチファイルでカレントフォルダ内のパスとファイル名を併記し、ファイル名一覧を書き出したいのですが、 c:\test\123.txt c:\test\abc.txt ・ ・ c:\test\いろは.txt 欲をいえば下の様に、 "c:\test\123.txt" "c:\test\abc.txt" ・ ・ "c:\test\いろは.txt" 『dir /b /w *.*> fname_ichiran.txt』 ↑ ↑ ↑ をどのように変更すれば良いのでしょうか? 今回もどなた様かお知恵を貸して下さい。よろしくおねがいします。
- 締切済み
- その他(プログラミング・開発)
- 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
補足
ありがとうございます。上記でできました。