关于度量的PHP正则表达式

关于度量的PHP正则表达式,php,regex,Php,Regex,我有一些字符串,我想得到金额和单位。下面是字符串等所需数组的示例: 10袋->[“10”,“袋”] 10磅->[“10”,“磅”] 10磅橡木[“10”,“磅](我不需要最后一部分) 10克[“10”,“g”] 10磅木材+8块木板+1个螺丝[“10”,“磅”,“8”,“1”] 你知道吗?我有很多“我不需要的最后一部分”,所以我不会使用str_replace函数。目前,我试图找到一些与preg_match一起使用的东西。我发现了类似这样的东西,但我不擅长使用正则表达式来理解如何添加“+”句柄

我有一些字符串,我想得到金额和单位。下面是字符串等所需数组的示例:

  • 10袋->[“10”,“袋”]
  • 10磅->[“10”,“磅”]
  • 10磅橡木[“10”,“磅](我不需要最后一部分)
  • 10克[“10”,“g”]
  • 10磅木材+8块木板+1个螺丝[“10”,“磅”,“8”,“1”]
你知道吗?我有很多“我不需要的最后一部分”,所以我不会使用str_replace函数。目前,我试图找到一些与preg_match一起使用的东西。我发现了类似这样的东西,但我不擅长使用正则表达式来理解如何添加“+”句柄,并避免它与字符串上的“10g”匹配,比如“10grapes”


我想您正在寻找这种模式:
\d+(\s(袋子|磅|克|千克|磅|盎司|毫克|毫升))?

以一个数字开头,后面可能跟一个空格和一些单词,比如 如:
行李
g
kg
oz
盎司
mg
ml

var模式=/\d+(\s(袋重|磅|克|千克|磅|盎司|克|毫克|毫升))?/g;
控制台。日志(“10包”。匹配(模式));
控制台日志(“10磅”。匹配(模式));
控制台。原木(“10磅橡木”。匹配(图案));
控制台日志(“10g”。匹配(模式));

控制台。原木(“10磅木材+8块木板+1个螺丝”。匹配(图案))
您的正则表达式与
10个包中的
10 b
不匹配。这很好,只需添加
| bags?
备选方案,请参见
(\d*\?\d+)\s*(lbs?| g | kgs?| lbs?| oz |盎司?| m[gl]| bags?\b
)正则表达式非常适合从正则字符串中提取文本。。。我感觉你的输入字符串太不规则了,无法用正则表达式进行可靠的解析-我感觉无论我们想出什么,你都会有一个输入字符串在某个时候破坏它。问题是标记了PHP,而不是Javascript。@Toto我不是说你可以用Javascript做到这一点,我是说我想你在找这个pattern@Toto正则表达式模式是个例外,我不同意。然而,您的输出并不是想要的。例如,第一个结果应该是:
[“10”,“bags”]
@Toto好吧,我只是根据
一行猜测模式。我发现了类似的东西,但我不擅长使用由OP发布的regex
'/(\d*\.?\d+)\s*(lbs?|g|kgs?|pounds?|oz|ounces?|g|mg|ml)\b/'