通貨記号のある数字のみをキャッチする 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];
理由はありますか?