痔になりやすい生活習慣とは?

以下の文字列から、最後の「\」以降の文字列を取得する方法を
教えていただけますでしょうか。

D:\PROGRAM\ANALYZE\LAN\data0123.dat

この文字列から、「data0123.dat」を取り出したい。
「data0123.dat」の部分は、拡張子含めていろいろ変わります。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

.dat」に関するQ&A: .datファイルとは

A 回答 (5件)

もっとスマートな式があるかもしれませんが


my $S = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
## 正規表現
$S =~ m/.*\\([^\\]+)$/;
print $1;
ただし、ファイルパスを見るとDOS(Windows)環境のようですので環境はShift-JIS。
全角文字が混ざった場合には正規表現が正常動作する保障がありません。
正規表現の練習なら良いのですがこの程度の処理なら組み込み関数使った処理のほうが効率が良いと思います。
## 組み込み関数
print substr($S,rindex($S,"\\")+1);
ほかにも書き方はあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
スマートな書き方があるのですね。
print substr($S,rindex($S,"\\")+1);
の手法は参考になりました。
rindexは使ったことが無かったので、試してみます。

ちなみに今回の使い方としては、Webツール(CGI)でWindowsから
ファイル名称を読み取り、サーバ側でEUCコードに変換して処理を
しています。(ファイルアップロード時のファイル名称を使って、
出力ファイル名称等を生成させています。)

お礼日時:2008/06/03 11:19

正規表現なら


m/.*\\(.+)$/;
でいいはずです>#4.
$' を使うなら m/.*\\/ でマッチさせる.
    • good
    • 4
この回答へのお礼

お礼遅くなりましたが、ご回答ありがとうございました。
今回は色々な手法を伝授いただき、大変助かりました。
今後ともよろしくお願いいたします。

お礼日時:2008/06/17 11:51

splitを使って、次のように書けます。



$path = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
$dat = (split /\\/, $path)[- 1]

$pathがご質問内容の文字列で、$datが取り出した部分です。
参考意見ということでよろしくお願い致します。
    • good
    • 1
この回答へのお礼

ご回答ありがとうごいざいます。
splitを使うという手もありましたね。
正規表現しか考えていませんでした。
参考にさせていただきます。

お礼日時:2008/06/03 10:13

#1 と違う方針をいくつか:


・正規表現は最長一致であることを使うと [] は使わなくていい
・$'
・split
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
以下コードで実現できましたが、正しくかつ効率的でしょうか?

my $org_str = "D:\PROGRAM\ANALYZE\LAN\data0123.dat";
my $new_str;

if($org_str =~ /\\\S+\\/){
$new_str = $';
}
print $new_str;

結果:
data0123.dat

お礼日時:2008/06/03 09:55

http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6 …

ヒント
[ ] ^


答えまるまるは ここの約束で 書いてあげられない
    • good
    • 0
この回答へのお礼

ヒントのご提示ありがとうごいざいます。
試行錯誤してみます。
またよろしくお願いいたします。

お礼日時:2008/06/03 10:14

このQ&Aに関連する人気のQ&A

.dat」に関するQ&A: 拡張子「dat」の変換方法

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現で最初にマッチしたものだけを選択する方法

秀丸の正規表現を用いて「その行で最初にマッチした単語」だけを取得したいのですが可能でしょうか

一例をあげますと、
検索文字列:ももりんごみかんももりんごみかん
とあるとき、左の「りんご」だけを「なし」に置換したいという希望です。

Aベストアンサー

> ついでといっては恐縮ですが、(?\2)という部分がどのような意味なのか教えて
これより前の部分で、() で囲まれた部分の 2 つ目のみにヒットさせる
という意味になります。詳細は、HmJre.dll のヘルプをご覧下さい。
秀丸エディタのヘルプの正規表現の項目からも辿れます。

QJavaScriptで文字列の特定文字以降を取得する方法

変数 url に以下のような文字列が代入されています。
var url='http://www.example.com?id=2&page=3';

ここから?以降の文字列だけを取得したいのですが、どのようにすれば良いのでしょうか?
「id=2&page=3」←このような結果が欲しいです。

ブラウザのurlから直接?以降を取得するには location.search を使えば良いというのは調べてわかりましたが、変数に文字列としてurlが代入された場合の方法がわかりません。

ご回答よろしくお願いいたします。

Aベストアンサー

文字列から抽出するのであれば、indexOfを使うか正規表現かでしょうね
深く考えなければ前者、複雑なデータを取りたいなら後者でしょうか

<script>
var url='http://www.example.com?id=2&page=3';
if(url.indexOf("?")>=0){
var str1=url.substring(url.indexOf("?")+1,url.length);
}
document.write(str1+"<br>");

var reg=new RegExp("\\?(.+?)$");
if(url.match(reg)){
var str2=url.match(reg)[1];
}
document.write(str2);
</script>

Qサクラエディタでの正規表現使い方をお教えください。

 次のようなテキストがあり =より前を削除したいのです
Range("A1").ColumnWidth = 6.5
Range("B1").ColumnWidth = 6
Range("C1").ColumnWidth = 7
Range("D1").ColumnWidth = 6.88
Range("E1").ColumnWidth = 6.25
置換え後は=より後の文字だけにしたいのです
6.5
6
7
6.88
6.25
のように
宜しくお願い致します。

Aベストアンサー

アバウトな書き方をするならば
^.*\s=\s

もうちょっとまじめに書くと
^Range\(\".*\"\)\.ColumnWidth\s=\s

記号等の補足です。
^ 行の先頭
. 何か一文字
* 直前の文字の繰り返し
\s スペース
() ". などは制御文字になるため\をつけてエスケープします。

Qa要素の末尾のスラッシュを正規表現で削除

htmlの開始タグの中の末尾から2文字目のスラッシュのみを指定する方法を探しています。

例:
<a href="test.jpg" />文字列</a>

上記のような間違いが大量にあるHTMLファイルを綺麗にしたいので、正規表現での指定方法を教えて下さい。

Aベストアンサー

この手の処理を正確に行うのに正規表現だけではかなり荷が重いのですが、
以下の記述なら、まず大抵の場合で大丈夫でしょう。

置換前: <a\b([^>]*?)/>
置換後: <a$1>

実行例
$ perl -pi -e 's|<a\b([^>]*?)/>|<a$1>|g' *.html

Q一番後ろのスラッシュ以降を削除する

お世話になります。Perlで
$URL=$in{'URL'};
でHTMLフォームからホームページアドレスを取得するとします。

これが
http://yahoo.co.jp/index.html なら
http://yahoo.co.jp/ のみに

http://yahoo.co.jp/nanka/toarru.html なら
http://yahoo.co.jp/nanka/ のみに

もちろん
http://yahoo.co.jp/ ならそのままに
$URLの値を変更したいのですが、どうしたらよいのでしょう。
サンプルコードなどで解説お願いします。

Aベストアンサー

こんなんでいいと思いますよ

$URL = "http://aaa.bbb.ccc/aaaa/bbbb/";
$aaa = substr($URL, 0, rindex($URL,"/")+1);

Q正規表現?の置換方法について!(以降削除等)

置換方法についてお詳しい方よろしくお願いいたします。

現在行いたいことは、ある対象とする記述以前、または以降の内容を削除したいと考えております。

具体的には、仮に<div id="hogehoge">とあったとします。

この場合、これ以前の記述を全て削除の置換を行いたいと思っています。
どんな記述があっても、<div id="hogehoge">の記述以前は全削除という置換です。

また、これは以前なのですが、この記述が終わったマーク、こちらも例えばですが<!--//hogehohe-->という記述終了を指定するコメントがあったとします。

その場合、<!--//hogehohe-->以降の記述は全て削除という指定を行いたいと思います。

伝わりますでしょうか。。。

何かを対象にする置換は調べたところ見つかったのですが、対象をもとに以前、以後という指定での置換が分かりません。><

お詳しい方いらっしゃいましたらアドバイスを頂けないでしょうか。

宜しくお願いいたします。

Aベストアンサー

notepad++ で確認
http://notepad-plus-plus.org/

CTRL+H または メニュー/検索/置換 から「置換」のダイアログを開き

検索文字列: ^.+(<div id="hogehoge">)
置換文字列: $1
検索モード: 正規表現
. matches newline: チェックを入れる (ファイル先頭まで削除する場合)
. matches newline: チェックしない (同じ行の頭まで削除する場合)
置換ボタンを押す
にて「以前の記述を全て削除」ができます

検索文字列: (<!--//hogehoge-->).+$
なら「以降の記述は全て削除」です

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Q正規表現で一つ目の区切り文字で区切りたいのですが・・・

aaa/bbb/ccc/ddd

aaa/bbb/ccc/ddd/eee

aaa/ccc/ddd

$a=~/(.*)\/(.*)/;
$1はそれぞれ
aaa/bbb/ccc
aaa/bbb/ccc/ddd
aaa/ccc
と成ってしまいます。

このように
「最後の/」で分けられてしまいます。

一つ目の/で分けるにはどうしたらよいでしょうか。

Aベストアンサー

$a=~/^([^\/]*)\/(.*)/;
としてみてはいかがでしょうか。

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング