2017-01-11 17 views
5

私は正規表現のPHPのヘルプが必要です。 文字列の中に何らかの文字の後に数字がある場合。その数を取得し、数学を適用した後に置き換えます。通貨換算と同じ。特定の文字の後の文字列から数値を取得し、その数値を変換する

私はhttps://regex101.com/r/KhoaKU/1

([^ \?] )AUD(\ dは

私はそこに40ここにすべて一致した数だけ、それがマッチしていますしたいが、正規表現は正しくない、この正規表現を適用また20.00、9.95など。私はすべてを取得しようとしています。それらを変換します。

function simpleConvert($from,$to,$amount) 
{ 
    $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to); 

    $doc = new DOMDocument; 
    @$doc->loadHTML($content); 
    $xpath = new DOMXpath($doc); 

    $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue; 
    return $result; 
} 

$pattern_new = '/([^\?]*)AUD (\d*)/'; 
if (preg_match ($pattern_new, $content)) 
{ 
    $has_matches = preg_match($pattern_new, $content); 
    print_r($has_matches); 
    echo simpleConvert("AUD","USD",$has_matches); 
} 
+0

を参照してください、あなたが一致する必要がある値が 'です40?あなたの正規表現は正しいですか? –

+0

問題はなんですか? – jeroen

+0

@WiktorStribiżew正規表現は正しくありません。ここで一致する数字は40だけですが、20.00、9.95などもあります。私はすべてを取得しようとしています。それらを変換します。 –

答えて

3

あなただけのすべてのこれらの値を取得し、simpleConvertでそれらを変換し、整数/浮動小数点数のための正規表現を使用して値を取得した後、array_mapに配列を渡す必要がある場合:

$pattern_new = '/\bAUD (\d*\.?\d+)/'; 
preg_match_all($pattern_new, $content, $vals); 
print_r(array_map(function ($a) { return simpleConvert("AUD", "USD", $a); }, $vals[1])); 

参照してください。 this PHP demo

パターンは詳細:

  • \b - 先頭ワード境界
  • AUD - リテラル文字列
  • - スペース
  • (\d*\.?\d+) - グループ1 0+桁、キャプチャオプションの.を入力し、1桁以上入力します。

$m[1]simpleConvert関数に渡されることを注意最初の(そして唯一の)捕捉グループの内容を保持しています。

あなたが入力テキスト内部にこれらの値を変更したい場合は、私がpreg_replace_callbackで同じ正規表現を提案:

$content = "The following fees and deposits are charged by the property at time of service, check-in, or check-out.\r\n\r\nBreakfast fee: between AUD 9.95 and AUD 20.00 per person (approximately)\r\nFee for in-room wireless Internet: AUD 0.00 per night (rates may vary)\r\nFee for in-room high-speed Internet (wired): AUD 9.95 per night (rates may vary)\r\nFee for high-speed Internet (wired) in public areas: AUD 9.95 per night (rates may vary)\r\nLate check-out fee: AUD 40\r\nRollaway beds are available for an additional fee\r\nOnsite credit card charges are subject to a surcharge\r\nThe above list may not be comprehensive. Fees and deposits may not include tax and are subject to change."; 
$pattern_new = '/\bAUD (\d*\.?\d+)/'; 
$res = preg_replace_callback($pattern_new, function($m) { 
    return simpleConvert("AUD","USD",$m[1]); 
}, $content); 
echo $res; 

だからPHP demo

+1

私はあなたの提案に従ってpreg_replace_callbackを使用しました。それは私のために働いた。ありがとう。 –

関連する問題