[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 メーリングリストの案内