[PHP-users 28885] Re: 正規表現による文字列の抽出

Shigetaka Yachi syachi @ brownmush.net
2006年 3月 29日 (水) 14:39:56 JST


矢地です。こんにちは。

On Wed, 29 Mar 2006 13:30:43 +0900
"k.kikuchi" <apple @ s21.fxis.fujixerox.co.jp> wrote:

> 正規表現を用いてApacheのaccess.logから、
> 検索ワードのみを取得したいです。
> 
> 全くの素人のため見よう見まねで以下のように書いてみましたが、
> うまく抽出することができませんでした。
> 
> 'http:\/\/www\.google\.co(.*)\/search\?(.*)$(/[-.!~*\d\w;/?:@&=+$,%#]+)?'
> 
> 「q=」から「&lr」までか、
> 「&lr」がない場合もあるため「"」までを取得し、
> 文字列をデコード後に配列に格納したいと思っております。

この箇所だけに限定しますが、
「"&q="から始まって、"&以外の文字"に挟まれた文字列」
と考えると、
-----
<?php
$line = 'http://www.google.co.jp/search?hl=ja&q=%82%a0%82%a0%20%82%a0%82%a0%81%40%82%a0&lr=';
$pattern = '/&q=([^&]*)/';
if (preg_match($pattern, $line, $matches)) {
    print $matches[1];
}
?>
-----
こんな感じでしょうか。

あとは、
・urldecode()でdecode
・mb_convert_encoding()で適切な文字コードに変換
・mb_ereg_replace()で全角スペースを半角スペースに変換
・split()で半角スペースをセパレータにして分割
という流れになると思います。

本当にまじめにやろうとすると、文字コードのあたりが面倒だと思います。
このあたりの話も参考にされてみると良いと思います。
http://tyche.pu-toyama.ac.jp/~a-urasim/webalizer/amount.html

-- 
Shigetaka Yachi <syachi @ brownmush.net>




PHP-users メーリングリストの案内