以下是我的应用程序可以接收的字符串示例:
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);
非常感谢任何帮助!
答案 0 :(得分:0)
这适用于您的示例字符串:
(\d+(?:\s?\w+)?)((?:\s+[^\d]+)+)
它抓住了数量,如果下面有多个单词,它就会认定它是单位并抓住它。然后它抓住剩下的,直到任何数字(或字符串的结尾)。
然而 - 即使它适用于示例字符串,它也很脆弱。类似2 veal steaks
的内容会以veal
为单位结束:S。