【发布时间】:2022-01-03 14:27:07
【问题描述】:
我正在尝试编写一个正则表达式来获取成分名称、数量、单位。字符串可以是任何模式,例如“pohe 2 kg OR 2 Kg pohe OR 2Kg Pohe”。 我试过下面的代码 -
<?PHP
$units = array("tbsp", "ml", "g", "grams", "kg", "few drops"); // add whatever other units are allowed
//mixed pattern
$pattern = '/(?J)(((?<i>^[a-zA-Z\s]+)(?<q>\d*\s*)(?<u>' . join("|", array_map("preg_quote", $units)) . '))|(?<q>^\d*\s*)(?<u>' . join("|", array_map("preg_quote", $units)) . ')(?<i>[a-zA-Z\s]+))/';
$ingredients = '2kg pohe';
preg_match_all($pattern, $ingredients, $m);
print_r($m);
$quantities = $m['q'];
$units = array_map('trim', $m['u']);
$ingrd = array_map('trim', $m['i']);
print_r($quantities);
print_r($units);
print_r($ingrd);
?>
上面的代码适用于字符串“2kg pohe”,但不适用于“pohe 2kg”。
如果有人知道我缺少什么,请帮助我。
【问题讨论】:
标签: php regex regex-group