質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

11738閲覧

文字列で最後に.(ドット)が現れる以降を取り除く

smnsmn

総合スコア175

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/24 22:59

ファイル名から拡張子を取り除きたいのですが、
test.test.phpだった場合に最後の.(ドット)以降を取り除き、test.testを取得したいです。
ファイルはパスになっていないので、pathinfoは使えませんでした。

最初に出てきた以降だと、上記のようにドットが2回以上出る場合、拡張子を取り除けませんし、
最後に出てきた以降を取得するという関数はあったのですが・・・

explodeでドットで区切った配列にして最後を取得だと、返り値が配列になってしまうので避けたいです。

ご教授頂けますと幸いです。
何卒よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

2

ベストアンサー

preg_replaceを使うのが楽かなと思いました。

PHP

1$str = 'test.test.php'; 2echo preg_replace('/\.[^.]*$/', '', $str);

投稿2016/02/25 00:00

dupont_kedama

総合スコア925

tozjp, logs👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2016/02/25 04:12

ご回答ありがとうございます! 正規表現が苦手なのですが、下記のように読みました。 間違いないと良いのですが・・・ 一番完結で分かりやすかったです。ありがとうございました。 自分でも正規表現を使わない方法でやってみたので、自己解決の方にも記載させて頂きます。m(__)m  \.    [^.]           *         $ (ドット)(の次にドットを含まない)(以後何文字でも)(で終わる(文字末尾)) 要するにドット以降にドットが出てこず、文字末まで続く部分をpreg_replaceで''(何も無し)に置き換えてるということですね。 理解が深まりました。
dupont_kedama

2016/02/25 04:56 編集

BAありがとうございます。 解釈はおおむね間違っていません。 今回のケースは複数の解決方法がありますが、正規表現を使った方が楽になるケースが多くありますので、ぜひチャレンジしてください。(私も得意ではありませんが。)
guest

0

ベストアンサーには正規表現を使った方法を記載しましたが、
自分で模索してみたところ関数を使った方法でも出来たので記載します。

PHP

1$str = 'test.test.php'; 2 3//strrposで最後に.(ドット)が現れる場所を検索。 4$length = strrpos($str, '.'); //$length = 4となります。 5 6//substrで0(先頭)から4($length)文字目までを取得。 7$name_only = substr($str, 0, $length); 8 9echo $name_only; //'test.test' 10 11############# 12 13//一行にまとめると 14$name_only = substr($str, 0, strrpos($length, '.'));

こんな感じで、拡張子を取り除くことができるかと思います。
回答頂いた皆様ありがとうございました!

投稿2016/02/25 04:22

smnsmn

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

explode でも配列から再構築すれば可能ですよ。
※'.'をうまく繋ぐ方法を思いつかなかったのでグダグダですが...

php

1$str = ''; 2$arr = explode('.','text.test.php'); 3$l = count($arr)-1; 4for($i=0;$i<$l;$i++)$str.=$arr[$i].(($i!=$l-1)?'.':''); 5echo $str; //text.text

後は正規表現を使えばできるかと
※綺麗な正規表現思いつかなかったのでグダグダなソースですが...
※最後の点を消すために、0~最後-1の文字列を抜き出してます。
※一発で目的の文字列を抜き出すこともできそう。

php

1preg_match('/.*\./','test.test.php',$matches); 2echo mb_substr($matches[0],0,$matches[1]-1); //test.test

投稿2016/02/24 23:37

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php

1$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); 2 3echo $path_parts['dirname'], "\n"; //結界 : /www/htdocs/inc 4echo $path_parts['basename'], "\n"; // 結果 : lib.inc.php 5echo $path_parts['extension'], "\n"; // 結果 : php 6echo $path_parts['filename'], "\n"; // 結果 : lib.inc

参考 : http://jp2.php.net/manual/en/function.pathinfo.php

上記で、$path_parts['filename'] を使うのはいかがですか?

投稿2016/02/24 23:23

logs

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2016/02/24 23:31

ご回答ありがとうございます! ファイルがパス形式(〇〇/〇〇/〇〇/ファイル名.php)ではない為、pathinfoが使えないのです・・・。 試したのですが、nullで返ってきます。 取り除いたい対象は完全にファイル名のみの文字列です。 例:test.php、hoge.jpeg 等
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問