電子書籍の厳選無料作品が豊富!

PHPバージョン5.2.4を使用しています。

http://www.hoge.com/abc/f.php
というURLを「/」で区切った結果を取得したいのですが、
普通にsplit('/', $url);の条件でやってしまうと
http:のあとの「//」があるので、そこも分割してしまいうまくいきません・・・
この場合、スラッシュ1つで区切って3つに分割したいのです。
スラッシュが1つの場合だけ区切るという正規表現はどのようになるのでしょうか?

取得したい結果
http://www.hoge.com
abc
f.php

A 回答 (5件)

splitで使用できる正規表現は ereg_* と同じものであり、


(?!...) のような拡張は受け付けません。

PHP: split - Manual
"パラメータ

pattern

大文字小文字を区別する正規表現。

正規表現で特殊文字とみなされる文字を分割したい場合、それらを まずエスケープする必要があります。split() (または他の正規表現関数に関して)の動作が何か変であると感じたならば、 PHP 配布ファイルの regex/ サブディレクトリにあるファイル regex.7 を読んでください。このファイルは man ページ形式となっており、読むには man /usr/local/src/regex/regex.7 のようにします。"
http://php.benscom.com/manual/ja/function.split. …


preg_splitを使えば拡張表記を使用できます。

PHP: preg_split - Manual
http://jp.php.net/preg_split

<?php

$url = 'http://www.hoge.com/abc/f.php';
$parts = preg_split("#(?<!/)/(?!/)#", $url);

print_r($parts);

実行結果:

Array
(
[0] => http://www.hoge.com
[1] => abc
[2] => f.php
)
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
なるほど、そもそもsplitじゃ無理だということでしたか・・・
そのやり方でできました。ありがとうございます。

お礼日時:2008/05/06 22:24

・ 配列を返さないといけないとしたら、関数を作ってみてはどうでしょうか。



次は、JavaScriptの例で参考にはならないかも知れませんが、

------------------------------------------------------------
<html>
<title>split1.html</title>
<script language="javascript">
<!--
function check_split(){
var ss="http://www.hoge.com/abc/f.php";
alert(getArrayFromURL(ss));
}

function getArrayFromURL(url){
ss2 = url.split("http://")[1].split("/");
ss3 = ss2.splice(0,1,"http://"+ss2[0]);

return ss2;
}
//-->
</script>

<body bgcolor="#fff8dc" onload="check_split()">
<h3>split1.html</h3>
<hr />
</body>
</html>
    • good
    • 0

・ 直後に/が続かないということで、



split('/(?!/)', $url);

でうまく行くのではないでしょうか。

・ ちょっと面倒ですが、

1. 最初は、//でsplitし、
  www.hoge.com/abc/f.php
  を取得し、

2. 次にそれを、/でsplitする。

3. 結果の配列の要素0の文字列
  www.hoge.com
  を修正し、(http://を加える)
  http://www.hoge.com
  とする、ではどうでしょうか。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
試してみたのですが、
split('/(?!/)', $url);
だと
Warning: split() [function.split]: REG_BADRPT in
というエラーがでてしまいます・・・

下の//で分解してからやるやり方だと確かにできるのですが、
自分のプログラムだとそういうやり方だとなにかと困るので
なんとかして上のようなやり方でできないものかと・・・考えています。

お礼日時:2008/05/06 16:31

split('/(?!/)', $url);



では、2番目の/が取り除けませんでした。
    • good
    • 0

・ 直後に/が続かないということで、



split('/(?!/)', $url);

でうまく行くのではないでしょうか。
    • good
    • 0

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