実現したいこと
ディレクトリのパス文字列の一番後ろのスラッシュとそれ以降の文字列を削除したいのですが、文字列中にバックスラッシュ(円記号か?)が含まれていなければうまく正規表現で削除できるのですが、文字列中にバックスラッシュ(円記号か?)が含まれている場合、うまく削除できません。
バックスラッシュ(円記号か?)が含まれていてもうまく削除できる方法が知りたいです。
発生している問題・分からないこと
/home/tada/test/test_tada/test\a /home/tada/test/test_tada/test /home/tada/test/test_tada
のパス文字列の一番後ろのスラッシュとそれ以降の文字列を削除して以下のようにしたいです。
/home/tada/test/test_tada /home/tada/test/test_tada /home/tada/test
's%\/[^\/]*$%%'
を正規表現の欄に入力すると
/home/tada/test/test_tada/test\a /home/tada/test/test_tada /home/tada/test
↑のようになります。2行目と3行目はうまく末尾のスラッシュとそれ以降の文字列が削除できてるのですが、1行目が削除されずに残ったままです。
文字列中にバックスラッシュ、または円記号が含まれていてもうまく削除できる方法を知りたいです。
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
検索していろいろ正規表現を試したがうまくいかなかった。
補足
特になし
's%/[^/]*$%%' でよいのではないでしょうか。
コメントありがとうございます。
's%/[^/]*$%%'
を試したところ問題が解決しました!
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
意味を理解しましょう。何故 \/ と書くという間違いをしてしまったのかの理由を掘り下げて解決しておきましょう。放置すると同様の間違いを繰り返すことになります。
(1) 正規表現としては / は何の特別な意味も持ちませんので \ は不要です。
正規表現中の / の前に \ を書くのは、正規表現を / で囲んでいる時だけです。
これは、" " で囲んだ文字列の中に " を書きたい時に \" と書くのと同じ話で、正規表現での記号の意味とは関係ありません。
「スラッシュを削除する時の例」
正: s%/%%
正: s/\///
意図しない動作はしないと思うが不要な\の記述: s%\/%%
(2) [ ] や [^ ] の中ではほとんどの記号は特殊な意味を失います。例外は [ ] ^ - の4文字。
[^\/] は、「バックスラッシュ(フォントによっては円記号)とスラッシュ以外の1文字」です。
>意味を理解しましょう。何故 \/ と書くという間違いをしてしまったのかの理由を掘り下げて解決しておきましょう。放置すると同様の間違いを繰り返すことになります。
まだ正規表現の理解が曖昧でバックスラッシュでスラッシュをエスケープする事で正規表現がうまく処理できるかのような錯覚におちいっていました。正規表現の本を途中まで1回読んだきりで、理解が中途半端なままで、今回の問題もどこから手を付ければいいのか分からなかったのですが、正規表現の基本を押さえていれば分かる事でした。時間的に急いでたというのもありますが改めて正規表現の基本を押さえておきたいと思いました。
「正規表現の理解が足りない」という理由は表面的なもので、自分が何をきちんと理解していて、自分が何をちゃんと理解しないまま進めているのか、の把握が重要です。関係する知識をすべて完璧にしてからで無いと進まないのであれば、何をするにも数ヶ月・数年かかることになるので、理解不十分のまま進むのは問題ありません。
「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」と現状が把握できたのかどうか?
「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」と把握できていれば、 \ と [^ ] だけピンポイントに調べれば良いので、調べる範囲は狭いです。
ただ、「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」という認識が出来ていなかったとすると、「現状を分析しようとしていなかった」か「現状を分析する力が無い」のどちらかなので、それぞれ何らかの対策が必要かと思います。
回答1件
あなたの回答
tips
プレビュー