0

通貨記号のある数字のみをキャッチする preg_match_all パターンがあります。記号がない場合は数字のみをキャッチします。ただし、記号を含まない $ 記号以外では失敗します (エラーなしで何も返しません)。

これが私が試していることです:

include 'simple_html_dom.php';

$html = file_get_html($url);

// Find price if added our code
$ret = $html->find('.price');

$pattern = '/\p{Sc}\s*\d{1,3}(?:,\d{3})*(?:\.\d+)?/u';

以下は、simple_html_dom によって返される可能性があるものと、それらが機能するか失敗するかの例です。次のいずれかになります。

$ret[0] = '<span class="price">100</span>'; // this returns null

$ret[0] = '<span class="price">£100</span>'; // this returns null

$ret[0] = '<span class="price">€100</span>'; // this returns null

$ret[0] = '<span class="price">$100</span>'; // this works correctly and returns $100

preg_match_all($pattern, $ret[0], $matches);

echo $matches[0][0];

理由はありますか?

4

1 に答える 1

0

コードでは、$ret文字列を配列に配置するのではなく、変数を置き換えているため、正規表現の照合は最後の文字列に対してのみ実行されます。投稿したものがコードの場合は$ret、配列を作成して文字列を追加する必要があります。ここでは、正規表現の観点からすべてが正常に機能しているようです。

編集:
私が今見ている問題は、あなたがすべてを追加しているということです、あなたは最初、 2番目などに$ret[0]追加するか、または使用する必要があります$ret[0]$ret[1]$ret[]=

于 2012-11-30T08:42:15.837 に答える