正则表达式:多个数字&一个字符串

时间:2016-06-14 09:56:56

标签: php regex

以下是我的应用程序可以接收的字符串示例:

2 eggs 24oz sweet potatoes 3 tbsp honey 

您会看到列表中有3个项目,可能有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);

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这适用于您的示例字符串:

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

它抓住了数量,如果下面有多个单词,它就会认定它是单位并抓住它。然后它抓住剩下的,直到任何数字(或字符串的结尾)。

然而 - 即使它适用于示例字符串,它也很脆弱。类似2 veal steaks的内容会以veal为单位结束:S。

See it here at regex101