URLからある引数を取り出したい。 - PHPプロ!Q&A掲示板

266

  • 0P

URLからある引数を取り出したい。

質問日時 / 2006年12月5日 02:25    回答数 / 4件

Questioner:  kyou2ex  このエントリーをはてなブックマークに追加 

キーワード / 正規表現    文字列    抽出   

お世話になります。
あるURLから、特定の文字列を正規表現で抽出したいのですが、
2日間試行錯誤して、結局できませんでした。

あるURLといっても、
googgelmapやmapplewebの地図URLから、緯度経度の情報を取り出したいのです。

現在はうまくいかなかったこともありしかたなく、下記のスクリプトを作成して抜き出しております。


例題のURL:http://maps.google.co.jp/maps?hl=ja&ie=UTF8&z=18&ll=35.666623,139.756538&spn=0.003491,0.004603&om=1
期待する結果:35.666623,139.756538

for ($i = 0; $i <= mb_strlen($fld041url); $i++) {
if ( $idokeido == 3 ) {
if (($idokeido == 3) && (is_numeric(substr($fld041url, $i,1)) || (substr($fld041url, $i,1) == "." ))){
//echo substr($fld041url, $i,1);
$urlido = $urlido . substr($fld041url, $i,1);
} elseif (substr($fld041url, $i,1) == "," ){$idokeido=4;
} else {$idokeido=0;}
} elseif ( $idokeido == 4 ) {
if (($idokeido == 4) && (is_numeric(substr($fld041url, $i,1)) || (substr($fld041url, $i,1) == "." ))){
//echo substr($fld041url, $i,1);
$urlkeido = $urlkeido . substr($fld041url, $i,1);
} else {$idokeido=0;}
} else {
if (($idokeido == 0)  && substr($fld041url, $i,1) == "l" ){$idokeido=1;
//lである場合
} elseif (($idokeido == 1)  && substr($fld041url, $i,1) == "l" ){$idokeido=2;
continue;
} elseif (($idokeido == 2)  && substr($fld041url, $i,1) == "=" ){$idokeido=3;
continue;
} else {$idokeido=0;}
}
}
$urlido = $urlido;
$urlkeido = $urlkeido;




正規表現を使えば1行で、かつ簡単に抜き出せるハズという幻想を持っていますが、
スキルが追いつかず、無駄に記述をしております。

どなたか、
http://maps.google.co.jp/maps?hl=ja&ie=UTF8&z=18&ll=35.666623,139.756538&spn=0.003491,0.004603&om=1】
から
【35.666623,139.756538】
を抜き出す正規表現を教えてください。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01lowolほかにもサンプルあれば違う感じにもなりそうですが、
┃┗A01-1kyou2exご返答ありがとうございます。 ほかにもサンプルと
┃ ┗A01-1-1dala00/&ll=([^&]+)&/ でいいのでは?
┗A02cubit正規表現じゃありませんが、parse_urlとparse_strを使

回答一覧

並び替え:

A01
answererlowol [12月5日 03:03]

ほかにもサンプルあれば違う感じにもなりそうですが、
とりあえずこんなんでどうでしょう?

  1. <?php
  2.  
  3. $str = "http://maps.google.co.jp/maps?hl=ja&ie=UTF8&z=18&ll=35.666623,139.756538&spn=0.003491,0.004603&om=1";
  4. preg_match("/&ll=([\d.,]+)/"$str$match);
  5. echo "<pre>";
  6. print_r($match);
  7.  
  8. ?>

この意見に回答する

ツリーへ TOPへ

A01-1
replyerkyou2ex [12月5日 08:44]

ご返答ありがとうございます。

ほかにもサンプルということであれば、
mapfanwebからの抽出も、同じように長大で無駄なスクリプトを記述して抜き出しております。

例:http://www.mapfan.com/index.cgi?MAP=E139.45.39.3N35.39.49.7&ZM=8
期待する結果:139.45.39.3,35.39.49.7


Nで区切られておりますので、いただきました表現をそのまま使うのは難しそうです。
最初に上記URLも書くべきでした…

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyerdala00 [12月5日 11:18]

/&ll=([^&]+)&/
でいいのでは?

この意見に回答する

ツリーへ TOPへ

A02
answerercubit [12月6日 01:33]

正規表現じゃありませんが、parse_urlparse_strを使えば簡単に抜き出せませんか?

$str= 'http://maps.google.co.jp/maps?hl=ja&ie=UTF8&z=18&ll=35.666623,139.756538&spn=0.003491,0.004603&om=1';
$p_url = parse_url(strtolower($str));
parse_str($p_url['query'], $p_query);
print_r($p_query);

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)