Php 正则表达式-识别分数

Php 正则表达式-识别分数,php,regex,fractions,Php,Regex,Fractions,我需要使用正则表达式从配方数据库中的表单字段中识别分数。 配料将在两部分表单字段中输入。字段一是数量,字段二是成分。然后,我需要将字段1分解为其分数部分,以输入数据库 可能的条目包括: 1、1/2、1 1/2和任何前面的文字,如1杯或1/2汤匙。 我预测最难的是:[2 28盎司罐头],其中2是数字,28盎司罐头是单词 我发现: (\b[0-9]{1,3}(?:,?[0-9]{3})*(?:[0-9]{2})?\b) 哪种工作。我对Regex完全陌生,所以我只做猜测和检查,我很难让它为我工作 问题

我需要使用正则表达式从配方数据库中的表单字段中识别分数。 配料将在两部分表单字段中输入。字段一是数量,字段二是成分。然后,我需要将字段1分解为其分数部分,以输入数据库

可能的条目包括: 1、1/2、1 1/2和任何前面的文字,如1杯或1/2汤匙。 我预测最难的是:[2 28盎司罐头],其中2是数字,28盎司罐头是单词

我发现: (\b[0-9]{1,3}(?:,?[0-9]{3})*(?:[0-9]{2})?\b) 哪种工作。我对Regex完全陌生,所以我只做猜测和检查,我很难让它为我工作

问题#1:我还需要识别单词部分。单词部分也可以是多个单词,例如2个大罐,其中大罐就是单词部分。上面的正则表达式很好地识别了这些数字,但我想不出一种方法来获取表单字段的其余部分。例如,1 1/2 tbsp给我1,1,2,但仅此而已,我也需要tbsp。我试着用这个正则表达式,用len来减少原始值,减去前面的分数,但是有问题,因为1/2和1/2都是允许的,所以无法计算要减去多少个点(1/2应该从字符串的前面减去6,1/2应该从字符串的前面减去4,仅仅看1,2的正则表达式结果,我不知道要减去多少)


问题#2:这并不是很重要,但是关于如何识别[2 28盎司罐头]问题有什么想法吗?上面的正则表达式提取了2,28盎司,这是不正确的,它应该只提取2盎司,然后再提取其余的(28盎司罐头)将是问题1的解决方案有望找到的另一部分。

这里有一个正则表达式,它将匹配混合数、整数和条目的其余部分(成分,希望与任何无关的数字匹配):

因此,例如,如果有
2个28盎司的罐子
,它将匹配:

group 1: 2
group 2: 2
group 3: 
group 4: 
group 5:  28 ounce cans
group 5: 28 ounce cans

您关心的组是1和5。组1将始终包含数量(作为数字、分数或带分数的数字),组6将始终包含剩余文本(成分)。

这里有一个正则表达式,它将匹配混合数字、整数和条目的其余部分(成分,希望有任何额外的数字):

因此,例如,如果有
2个28盎司的罐子
,它将匹配:

group 1: 2
group 2: 2
group 3: 
group 4: 
group 5:  28 ounce cans
group 5: 28 ounce cans

您关心的组为1和5。组1将始终包含数量(作为数字、分数或带分数的数字),组6将始终包含剩余文本(成分).

如果
2
28盎司罐头
在单独的表单字段中,为什么
2 28盎司罐头
很难提取数据?这听起来像是一个很难解决的问题。对于我自己的食谱,我只需将所有内容都写在小数点后;
.5杯
。你能给我一个预先填充的选择框吗de>1,
1/2
1/3
2/3
1/4
3/4
1/5
…用于分数选择?当然,有人可能知道他们的测量值是
4/3杯面粉
,但处理所有这些模棱两可的输入听起来很麻烦。因此最初的想法是使用3个字段。字段1是数字呃,字段2是单位,字段3是成分(因此条目应该是:1 1/2,汤匙,面粉)。这很有效!但这很痛苦,而且只使用两个字段会简单得多,一个是数字和单位的组合(在代码中,我会从单位中分割数字)另一个字段是IngredinToh,我在“”和“/”上使用了preg_split的分数然后使用switch语句将多少结果以不正确的分数形式输入到我的数据库中分子和分母为什么
2 28 oz.罐头
28 oz.罐头
在单独的表单字段中很难提取数据?这听起来像是一个很难解决的问题你能给一个选择框,预先填充
1
1/2
1/3
2/3
1/4
3/4
1/5
…作为分数选择吗?当然,有人可能知道他们的测量值是
4/3杯面粉
,但处理所有这些模棱两可的输入听起来很麻烦。所以最初的想法是使用3个字段。字段1是数字,字段2是单位,字段3是成分(因此条目应该是:1 1 1/2,tbsp.,面粉)。这很有效!但这是一个痛苦,而且只使用两个字段会简单得多,一个是数字和单位的组合(在代码中,我将从单位中分割数字),另一个字段是ingredientoh,我在“”和“/”上使用preg_split的分数,然后使用switch语句将多少个结果输入到数据库中,一个不正确的分数形式的分子和分母(?:)将他们排除在CAPTURATER之外是为了匹配一个混合数的小数部分。因为这是我们关心的整数,所以这一组并不重要。只有1和5可以。接近了!唯一的问题是它只忽略数字。例如,有人可以在数量字段中输入2,在配料中输入鸡蛋field@user1008960如果是在两个单独的字段中,为什么需要用正则表达式将它们分开?(我已经更新了,所以剩余的文本是可选的,只允许数字或分数)^((\d+(\d+\/\d+)))|(\d+\/\d+))))((.+)?$-我认为这是可行的?我认为空间也需要是可选的?字段一:数量(可以包括杯子之类的数字和/或文本)第二栏:配料(如鸡蛋、牛奶等)。我很想把它列为一个栏位,但我认为这是不可能的。将(?:)添加到组中会将它们排除在Capturat之外,这是为了匹配fr