人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPに関する質問です。
あるURL中に出てくる、ある文字列以降の文字列を抽出したいと思っています。
例:http://www.xxx.com/yyy/aaa/id=01234567/
この場合、?id=以降の文字列01234567を、?最後の/は抜かして抽出したいのですが、どのようにすれば良いのでしょうか。


●質問者: エヌ氏
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP URL 抽出 文字列
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● どうもと
●28ポイント

$file = "http://www.xxx.com/yyy/aaa/id=01234567/";

$pos1 = strlen($file);

$pos2 = strpos($file, "id=");

$link_str = substr($file,$pos2,($pos1 - $pos2 - 1));

echo $pos1;

echo $pos2;

echo $link_str;

?>

$idのスタート位置を探して、そこからid=01234567の長さ分の文字列を抜いてあげればよいかと。(´ー`)y-~~。

◎質問者からの返答

なるほど!と思いました。こういう方法もあるのですね〜

これなら、無理に正規表現を使う必要もなさそうです。ありがとうございました。

(なお、先ほど私なりに思いついた方法としては、

strrchr関数でまずid=以降の文字列(/、id=も含む)を取り出し、str_replaceで地道に/とid=を削っていくというものでした。)


2 ● HowAreYou
●28ポイント ベストアンサー

適当に思いついたもの数例

<?php

$url = 'http://www.xxx.com/yyy/aaa/id=01234567/' ;

// 正規表現 1
$word = preg_replace('/.*?id=(.*)\/$/', '$1', $url) ;

// 正規表現 2
preg_match('/id=(.*?)\//', $url, $m) ;
$word = $m[1] ;

// 「=」で分離
$m = explode('=', basename($url)) ;
$word = $m[1] ;
◎質問者からの返答

ありがとうございます。

なるほど!正規表現だと、すっきりするのでマスターすればこちらのほうが、よりスマートな書き方ができそうですね〜


3 ● phithon
●17ポイント

微妙に内容が被ってしまいましたが・・・

<?php
$url = 'http://www.xxx.com/yyy/aaa/id=01234567/';
$parts = explode('/', $url); // ['http:', '', 'www.xxx.com', 'yyy', 'aaa', 'id=01234567', '']

// その1、後ろから2番目がid文字列であると決め打ち
$id_part = $parts[count($parts)-2]; // 'id=01234567'
$id_data = explode('=', $id_part); // ['id', 01234567]
if ($id_data[0] != 'id') {
 throw new Exception('URLの形式が変更された場合');
}
$id = $id_data[1];
echo '1: ' . $id . "\n";

// その2、後ろから'id=...'の形式になっている部分を探す
for ($i = count($parts); $i >= 0; --$i) {
 $splitted = explode('=', $parts[$i]);
 if (count($splitted) == 2 && $splitted[0] == 'id') {
 $id = $splitted[1];
 break;
 }
}
echo '2: ' . $id . "\n";

// その3、正規表現
$id = preg_replace('/^http:\/\/www\.xxx\.com\/\w+\/\w+\/id=(\d+)\/$/', '\\1', $url);
echo '3: ' . $id . "\n";
◎質問者からの返答

後ろから探していくという方法であれば、確実性は高いかもしれませんね。

すごく参考になります。ありがとうございます!


4 ● typista
●17ポイント

「id=01234567/」以降に文字列が無いことが前提なら、

$file = "http://www.xxx.com/yyy/aaa/id=01234567/";
parse_str( strstr( rtrim( $file, '/' ), 'id=' ), $result );
echo $result['id'];

です。

右端の「/」を削除するのが

rtrim( $file, '/' )

で、「/」が無ければ何も処理しないのと同じです。

◎質問者からの返答

ありがとうございます。

parse_strを使う方法もあるのですね〜

いろいろ参考になりました。

ここらで、回答を締め切りたいと思います。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ