0

PHPと正規表現を使用してWebページから価格を取得しようとしています。価格は£123.12または$123.12(つまり、ポンドまたはドル)の形式になります。

libcurlを使用してコンテンツを読み込んでいます。次に、その出力はになりpreg_match_allます。したがって、次のようになります。

$contents = curl_exec($curl);

preg_match_all('/(?:\$|£)[0-9]+(?:\.[0-9]{2})?/', $contents, $matches);

これまでのところ簡単です。問題は、ページに価格がある場合でも、PHPがまったく一致していないことです。'£'文字に問題があることに絞り込みました-PHPはそれを好まないようです。

これは文字セットの問題かもしれないと思います。しかし、私が何をしても、PHPをそれに合わせることができないようです!誰かアイデアはありますか?

(編集:同じ正規表現とページコンテンツを使用して正規表現テストツールを使用しようとすると、正常に動作することに注意してください)

4

3 に答える 3

1

£の前に\を使用してみましたか

preg_match_all('/(\$|\£)[0-9]+(\.[0-9]{2})/', $contents, $matches);

この式を.Netと\£で試してみましたが、機能します。編集して「:」を削除しました。 (ソース:clip2net.com代替テキスト

Curlがあなたに悪いエンコーディングを与える可能性についての私のコメントを読んでください(この投稿のコメント)。

于 2008-11-29T15:32:00.580 に答える
0

多分ポンドにはhtmlエンティティの置き換えがありますか?ある種のカウチプログラムで正規表現を試してみるべきだと思います(つまり、ローカルで固定テキストと照合します)。

正規表現を次のように変更します。'/(?:\$|£)\d+(?:\.\d{2})?/'

于 2008-11-29T15:37:09.210 に答える
0

これは単純な値に対して機能するはずです。

'#(?:\$|\£|\€)(\d+(?:\.\d+)?)#'

これは、234,343 や 34,454.45 のような千単位の区切りでは機能しません。

于 2008-11-29T15:41:28.390 に答える