2012-01-19 9 views
1

私はstrの単純なものにマッチさせたいが、このマッチの最初の部分だけを返したい。これは私が調べたいものです。regex - ユニットの隣にある浮動小数点桁のパターンは何ですか

ジョー4.5オズ冷たい、インフルエンザのものを飲む。

私がしたいことは、マッチの後に一度の単位のバリエーションがある場合にのみ4.5を返すことです。

は、ここに私の推測マッチングに

/([0-9]*\.?[0-9])(?:[\s+][o(?<=\.)z(?<=\.)|ounce]?=\s)/i 

です:

4.5oz 
4.5 oz 
4.5 o.z. 
4.5 oz. 
4.5   oz. 
4.5ounce 
4.5Ounce 
4.5 Oz. 

が、私はまだのようにそれを実行したときに、私が得ます。

$matches = null; 
$returnValue = preg_match('/([0-9]*\.?[0-9])(?:[\s+][o(?<=\.)z(?<=\.)|ounce]?=\s)/i', 'Jo 4.5 Oz cold and flu stuff to drink.', $matches); 

助けがあれば助かります。ありがとうございます 乾杯 - ジェレミー

答えて

2

次に、あなたのようにそれほど複雑なパターンが必要です。

+0

yeps {1} \ dは+ \ sの* | \ d個の+を(、。):あなたが使用することができます私がどこにいるかについて/ /[[¥d]+.{1}[\d]+)(?:\s*o\.?z\.?||))i..しかし、私はあなたの方がきれいだと思います –

1

私はおそらくあなたがそこにしようとしているよりも簡単だと思う。この式を試してみる:

\s[\d]+.{1}[\d]+\s*(oz|ounce|o.z.|oz.) 

または完全なPHPで:

$test_string = 'Jo 4.5 Oz cold and flu stuff to drink.'; 
$returnValue = preg_match('/\s[\d]+.{1}[\d]+\s*(oz|ounce|o.z.|oz.)/i', $test_string, $matches); 

EDIT

あなたは彼らが使用するかどうかを確認したい場合。または、あなたが使用できます。

\d+(.|,){1}\d+\s*(ounce|o\.?z\.?) 

または

$returnValue = preg_match('/\d+(.|,){1}\d+\s*(ounce|o\.?z\.?)/ix', $test_string, $matches); 

EDIT 2

をしたい場合は名前のパターンは、この試してみてください。

$returnValue = preg_match('/(?P<amount>\d+(.|,){1}\d+)\s*(?P<unit>(ounce|o\.?z\.?))/ix', $test_string, $matches); 


print_r($matches); 

出力:

preg_match('/ 
     (\d+(\.\d+)?)    # float 
     \s*      # optional space 
     (ounce | o\.? z\.?)  # "ounce" or "o.z." or "oz" 
    /ix',       # make it case insensitive 
    $string, $matches); 

その後(?=...)かそこらでそれを囲むことでアサーションを結果$matches[1]を見たり、残りを行い、次のいずれか0

Array 
(
    [0] => 4.5 Oz 
    [amount] => 4.5 
    [1] => 4.5 
    [2] => . 
    [unit] => Oz 
    [3] => Oz 
    [4] => Oz 
) 
+0

いいえ/([¥d]+.{1}[¥d]+)(?:\s*oz|ounce|oz|oz/)/ iは$ match [1 ] .. ..しかし、ポイントを行うための良い方法があります.. typoの場合には.. hmmmm –

+0

ええ、申し訳ありません、私は\ s(空白をチェック)を削除するのを忘れていた。 「タイプミスの場合は、ポイントを行うためのより良い方法」とは何を意味するのか分かりません。代わりにコンマを使用したのですか? (。?。?|のz \ \ Oオンス)、その後、ケースを無視して、拡張のためのIXを使用してください...です – mason81

関連する問題