重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

ユーザーエイジェントを検索して
UP.Browserという文字列があった場合、
ユーザーエイジェントをauという置き換え表示したいと思っています。
具体的には
KDDI-KC3R UP.Browser/6.2_7.2.7.1.K.4.310 (GUI) MMP/2.0

au
と表示したいのですが、
Perlで記述する場合以下のように書いて間違えありませんか?
間違いなどありましたご指摘ください。

if($ENV{'HTTP_USER_AGENT'} =~ /UP.Browser/) {
$agent=~s/$ENV{'HTTP_USER_AGENT'} /au/g;
}

A 回答 (5件)

「間違いの可能性がある」あるいは「もっと効率いい方法がある」と思います。



・${HTTP_USER_AGENT} が UPXBrowserでもマッチします。
→UP.Browser と「.」以外が絶対に無いのなら問題にはなりませんが
→.をエスケープするとか、indexを使うとか。

・$agentの中身はどうなっているのでしょう?
→UP.Browserとかが沢山あるならともかく、一つしかないのならgはいらないです
→上と同様KDDI-KC3R UPMBrowser/612_7324771-K-45310 (GUI) MMP/250 みたいなのも置換されます。まずないでしょうが。
→$agent=$ENV{'HTTP_USER_AGENT'} なら、置換などせずに $agent='au' ; で済みますよね

・$ENV{'HTTP_USER_AGENT'} は今アクセスしている人のものです
→ 「あなたはauを使っています」みたいな使いかたならいいですが
    • good
    • 0
この回答へのお礼

忙しくて見るのが今になってしまい、申し訳ありません。そんな方法もあるんですね。まだ初心者なので思いつきませんでした!いい方法をお教えくださり、ありがとうございます。

お礼日時:2011/08/07 15:39

> ユーザーエイジェントに「UP.Browser」という文字列があった場合、$agentに「au」と入れたい。


というなら、素直に、
if(index($ENV{'HTTP_USER_AGENT'},'UP.Browser')>=0){ $agent='ua';}
でどうですか。
    • good
    • 0
この回答へのお礼

それが効率良い方法ですね。
ありがとうございます!

お礼日時:2011/08/07 15:41

>#2


ああ、本当ですね。うっかりしてました。
実際でもタマにやらかします。<メタ文字の見落し。
最初からパターンを作ろうとすると、まず大丈夫ですが、特定の文字列を見付けようとコピペしたときとかによくありますね。


そういうわけで、 決まった文字列を検索するなら、indexを使うとか、メタ文字を無効にする\Q \E を使うとかした方がいいですよ。という実例でした。


質問者からの補足がないので、どんな方法がいいのかアドバイスできませんが。
    • good
    • 0

こういうこと?



$agent_length = length($ENV{'HTTP_USER_AGENT'});
$agent_index = index($agent, $ENV{'HTTP_USER_AGENT'});
if (0 <= $agent_index && 0 <= index($ENV{'HTTP_USER_AGENT'}, "UP.Browser")) {
  substr($agent, $agent_index, $agent_length, "au");
}
    • good
    • 0

きっと勇み足だと思いますが, 本当に $ENV{'HTTP_USER_AGENT'} の値が


'KDDI-KC3R UP.Browser/6.2_7.2.7.1.K.4.310 (GUI) MMP/2.0'
なら
KDDI-KC3R UPMBrowser/612_7324771-K-45310 (GUI) MMP/250
は置換できないですよね>#1. 「かっこ」にマッチしない....

さておき, 「ユーザーエイジェント」と $agent と $ENV{'HTTP_USER_AGENT'} とはどのような関係にあるんでしょうか?
    • good
    • 0

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