- ベストアンサー
「/」を利用した正規表現
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
- みんなの回答 (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.php 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 )
その他の回答 (4)
- auty
- ベストアンサー率58% (284/486)
・ 配列を返さないといけないとしたら、関数を作ってみてはどうでしょうか。 次は、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>
- auty
- ベストアンサー率58% (284/486)
・ 直後に/が続かないということで、 split('/(?!/)', $url); でうまく行くのではないでしょうか。 ・ ちょっと面倒ですが、 1. 最初は、//でsplitし、 www.hoge.com/abc/f.php を取得し、 2. 次にそれを、/でsplitする。 3. 結果の配列の要素0の文字列 www.hoge.com を修正し、(http://を加える) http://www.hoge.com とする、ではどうでしょうか。
お礼
ご返答ありがとうございます。 試してみたのですが、 split('/(?!/)', $url); だと Warning: split() [function.split]: REG_BADRPT in というエラーがでてしまいます・・・ 下の//で分解してからやるやり方だと確かにできるのですが、 自分のプログラムだとそういうやり方だとなにかと困るので なんとかして上のようなやり方でできないものかと・・・考えています。
- auty
- ベストアンサー率58% (284/486)
split('/(?!/)', $url); では、2番目の/が取り除けませんでした。
- auty
- ベストアンサー率58% (284/486)
・ 直後に/が続かないということで、 split('/(?!/)', $url); でうまく行くのではないでしょうか。
お礼
ご返答ありがとうございます。 なるほど、そもそもsplitじゃ無理だということでしたか・・・ そのやり方でできました。ありがとうございます。