3

私は以下のような文字列を持っています

$data = 1hs: "1 U.S. dollar", rhs: "29.892653 Taiwan dollars"

次のような配列を取得できるように、文字列をスペースと二重引用符のみで分割します。

$data[ ]= 29.892653  <--- the most important part I would like to get. 
$data[ ]= Taiwan dollars <--- not sure is it possible to do this?

これまでのところ、以下のコードを使用しています

$data = preg_split("/[,\s]*[^\w\s]+[\s]*/", $data,0,PREG_SPLIT_NO_EMPTY); 

ただし、29 のみを返し、「.」を含むすべてのマークを分割します。

4

3 に答える 3

1

この正規表現は、適切な名前の配列フィールドにすべてを引き出します。

$data = '1hs: "1 U.S. dollar", rhs: "29.892653 Taiwan dollars"';

// Using named capturing groups for easier reference in the code
preg_match_all(
    '/(?P<prefix>[^,\s:]*):\s"(?P<amount>[0-9]+\.?[0-9]*)\s(?P<type>[^"]*)"/', 
    $data, 
    $matches, 
    PREG_SET_ORDER);

foreach($matches as $match) {
    // This is the full matching string
    echo "Matched this: " . $match[0] . "<br />";

    // These are the friendly named pieces
    echo 'Prefix: ' . $match['prefix'] . "<br />";
    echo 'Amount: ' . $match['amount'] . "<br />";
    echo 'Type: ' . $match['type'] . "<br />";
}

出力:

  • これに一致: 1hs: "1 US Dollar"
  • プレフィックス: 1hs
  • 量: 1
  • 種類: 米ドル

と:

  • これに一致: rhs: "29.892653 台湾ドル"
  • プレフィックス: rhs
  • 金額: 29.892653
  • 種類:台湾ドル
于 2013-03-29T21:06:37.147 に答える
0

以下のコードは、最初に < number>[.< number>] としてフォーマットされた数値を取得し、その後のすべてを、質問に表示されない特別なケースがない限り、説明に一致する 2 番目のグループとして取得する必要があります。

preg_match('/([0-9]+\.{0,1}[0-9]*)\s+(.*?)/', $data, $matches);
print_r($matches);
于 2013-03-29T20:20:25.653 に答える
0

これは、形式が常に同じであると仮定して、文字列関数を使用して 1 行で実行できます。

$string = '1hs: "1 U.S. dollar", rhs: "29.892653 Taiwan dollars"';
$data = explode(' ', trim(substr($string, strrpos($string, ':')+2), '"'),2);
var_dump($data);
于 2013-03-29T20:32:57.200 に答える