2016-06-14 4 views
0

私のアプリケーションが受け取ることができ、文字列の例です:あなたは、リスト内の3つの項目があるわかります正規表現:ここで1つの文字列で複数の番号&ラベル

2 eggs 24oz sweet potatoes 3 tbsp honey 

、1またはN(があるかもしれませんすなわち:卵2個、または何あなたは上記を参照)

私は何を取得したいのですが、私は今取得していますが、測定とラベルを持つ配列に近いですが、100%ではない

//Expected Result 
[0]=>['2','24oz','3 tbsp'], 
[1]=>['eggs','sweet potatoes','honey'] 

//Actual Result, 'measurements' are in both arrays, 'values' are not... 
[0]=>['2 eggs','24oz','3 tbsp'] 
[1]=>['2 eggs','24oz','3 tbsp'] 

//regex being used: 
$test = '2 eggs 24oz sweet potatoes 3 tbsp honey '; 
preg_match_all('!(\d+\s?\S+)!', $test, $matches); 
されます

どのようなヘルプが大歓迎です!

+2

測定値の一覧が必要です。それから、 '3 dsp'から' 2個の卵 'を曖昧にする方法がないので、 '〜\ d + \ s *(?:oz | tbsp | ETC。)? [this regex demo](https://regex101.com/r/lO1gQ4/2)を参照してください。 –

+0

こんにちは、このhttps://regex101.com/r/kP5wU3/1を試してみてください –

答えて

0

これはあなたの例の文字列で動作します:

(\d+(?:\s?\w+)?)((?:\s+[^\d]+)+) 

それは量をつかむと、複数の単語、次があれば、それはそれは同様ユニットとグラブだ前提としています。次に、残りの部分を任意の数字(または文字列の最後)まで取得します。

しかし、たとえそれが例の文字列で動作しても、それは壊れやすいものです。 2 veal steaksのようなものは、単位としてvealになります。

See it here at regex101

関連する問題