0

ユーザーエージェントを次のような単純な基本文字列にストリップすることになっているモバイル検出クラスを作成しようとしています:

出力: Mozilla/5.0 (*Linux x86_64*) AppleWebKit/* (Gecko のような KHTML) Chrome/* Safari/*

これから:

入力: (HTTP_USER_AGENT) Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (Gecko のような KHTML) Chrome/24.0.1312.69 Safari/537.17

私は this: /[0-9.-]{4,}/ipattern を使用して数字を取り除き、次のようになります:

上記のパターンで WHERE AM I SO FAR の結果: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/* (KHTML、Gecko など) Chrome/* Safari/*

しかし、私の問題はX11;、最初の開き括弧の後から最初の空白まですべてを削除するパターンが必要です。これが正しい方法だと思います。受け入れ可能な代替手段は、パターンを使用してブラケットをまったく削除できるようにすることです。

助言がありますか?

PS: モバイル検出と browscap への依存の問題を解決するためにこれが必要です。だから、反対票を投じないでください!

PS2: これの主な目的は、モバイル クライアントとデスクトップを検出することです。その後、OSなどの情報を提供するために微調整します.

4

2 に答える 2

1

X11を交換してください。KHTMLではありません:

preg_replace('/\([^,)]*? ([^\)]+)/','(*\1*',$agent);

ここで説明されたデモ: http://regex101.com/r/vL6gT1

于 2013-02-07T23:16:48.160 に答える
1

使ってみて

preg_replace('/[0-9.-]{4,} #your original regex
    | # OR
    ( # start capture
       \( # open paren
    ) # end capture (so we can put the paren back)
    [^\s]+ # any number of non-space characters
    \d # a digit
    [^\s]+ # the remaining non-space characters (including other digits)
    \s # the final space
/xi', '\1', $str);
于 2013-02-07T23:18:01.293 に答える