2017-04-13 6 views
1

私はpreg_match_allを使用していますが、後続の文字を持たない浮動小数点数を取得したいと思います。例PHP Regex最後に文字がない浮動小数点数を取得する方法

[0] => Array 
    (
     [0] => 139 
     [1] => 10.4 
    ) 

を希望

-20.4a 110b 139 31c 10.4 

については

私はこのパターン使用して反対に行うことができた試してみた:)

/\d+(.\d+を? (λ= [az])/ i

は、数字がyou can see in this demoの文字をキャプチャします。しかし、後ろに手紙がない数字を取り込む方法を理解することはできません。

答えて

1

あなたが肯定先読みで、この正規表現を使用することができます。

[+-]?\b\d*\.?\d+(?=\h|$) 

RegEx Demo

(?=\h|$)は、一致した番号の後に水平ホワイトスペースまたは行の最後の存在を主張します。

はまたあなたは独占的量で、この正規表現を使用することができます。

[+-]?\b\d*\.?\d++(?![.a-zA-Z]) 

RegEx Demo 2

2

使用先読み:

/\d+(\.\d+)?(?![a-z])/i 

しかし、あなたも数字とドットを除外する必要が十分ではありません。

/\d+(?:\.\d+)?(?![a-z\d.])/i 

PHP:

$string = '-20.4a 110b 139 31c 10.4'; 
preg_match_all('/\d+(?:\.\d+)?(?![a-z\d.])/', $string, $match); 
print_r($match); 

出力:

Array 
(
    [0] => Array 
     (
      [0] => 139 
      [1] => 10.4 
     ) 

) 
+3

これは '20 'のうち20にマッチします。OPが望むものではない「4a」 - DVed –

1

1は、ここに取ることができるいくつかの方法があります。

原子団マッチングと否定先読みまたはワード境界:また、ドットと数字否定する否定先読み使用

(?>\d+(?:\.\d+)?)(?![a-z]) 
(?>\d+(?:\.\d+)?)\b 

:空間に

\d+(?:\.\d+)?(?![a-z.\d])

肯定先読みは(と思われますここでの区切り記号にする)または文字列の最後

\d+(?:\.\d+)?(?=\s|$)

関連する問題