1

次のような文字列があります

&pound;&nbsp;                               0.00<br>

£タグとタグの間の文字列にある 10 進数値を抽出することにのみ関心があります<br>。現在、次の正規表現があります。

(?<=&pound;&nbsp;)(.*?)(?=\<br>)

次の結果が得られます

                       0.00

最終結果に空白が含まれていないことを確認する必要があります。次のようなことを試しました...

(?<=&pound;&nbsp;\s*)(.*?)(?=\<br>)

これは明らかに間違っており、自分が何をしているのかわからないことを意味します。

空白を除いた正しい 10 進数値を確実に抽出するにはどうすればよいですか?

e.g. 
0.00
instead of 
           0.00
4

4 に答える 4

2

trim()結果の文字列?

$result = trim($result);
于 2013-01-28T21:22:20.537 に答える
2

10 進数値のみに関心がある場合、正規表現パターンは次の例のようになります。この例では、検索文字列で見つかったすべての小数を出力します。

<?php

$string = '&pound;&nbsp;

                          5.00<br><br><br>

                          Shipping&nbsp;&pound;&nbsp;3.35<br><br><b>Total&nbsp;&pound;&nbsp;

                             8.35<br></b>';

$pattern = '/&pound;&nbsp;\s*(-?[0-9]+\.[0-9]+)<br>/u';

$result = preg_match_all($pattern, $string, $matches);
if($result === FALSE) {
    die('error in regex');
}

// output the decimals
if($result > 0) {
    foreach($matches[1] as $decimal) {
        echo $decimal, PHP_EOL;
    }
}

// Output:
//
// 5.00
// 3.35
// 8.35

パターンは正と負の小数に一致することに注意してください

于 2013-01-28T21:25:46.590 に答える
2

なぜ正規表現を単純化しないのですか?

/&pound;&nbsp;\s*([0-9\.]+)<br>/u

更新:より一般的なケース:

/&pound;.*([0-9\.]+)<br>/u
于 2013-01-28T21:27:06.760 に答える
0

これは機能します。

$s = '&pound;&nbsp;                               0.00<br>';
preg_match('~&(.*?);\s+([\d\.]+)~i', $s, $m);
// or
// preg_match('~&(\w+);\s+([\d\.]+)~i', $s, $m);
print_r($m);

外;

配列
(
    [0] => £  0.00
    [1] => ポンド; 
    [2] => 0.00
)
于 2013-01-28T21:29:21.950 に答える