RegEx过早匹配

时间:2016-05-12 17:44:58

标签: php regex pcre

任何人都可以帮我处理RegEx吗? 我想删除饮料的artivle标题中的所有必要信息,如尺寸,数量等。

我制作了这个RegEx:/(?<!^)(\d{1,2}\s?x\s?)?\d{1,2}((,|\.)\d{1,2})?\s?L?/igU

25 Test Drink 60% 12x1,0L上,它与5 25匹配。

Test Drink 60% 12x1,0L上,它与60之前的%匹配。

我该如何避免这些例子?我想只匹配12x1,0L。我不得不放这么多可选字符,因为数据源的数量和大小格式非常不一致。也可能发生数量缺失,因为它只有一瓶/罐。

我在下面和此处提供了更多示例标题:https://regex101.com/r/aQ2kO8/2

  

25试验饮料60%12x1,0L
  测试饮料60%2x0,5
  测试饮料3 x 0,75 L
  测试饮料4x0,75 L
  测试饮料5 x 0,75L
  测试饮料66 x 0,75
  测试饮料0,75
  测试饮料0.75
  7UP 12 x 1 L

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用(?:\d+\s*x\s*)?(?:\d+[.,])?\d+\s*L?\s*$作为搜索模式,如果您将其应用于多行文本,则必须设置m和g修饰符。如果您不关心lx

的字符,也可能需要使用i-modifier
  • (?:\d+\s*x\s*)?可选地匹配数字,后跟可能被空格包围的x
  • (?:\d+[.,])?可选地匹配数字后跟点或逗号
  • \d+匹配一个或多个数字
  • \s*L?\s*可选地匹配可能被空格包围的L
  • $匹配该行的结尾。根据您的描述,您想要匹配的内容始终在最后,通过使用此功能,我们可以避免在饮品名称中匹配数字

查看regex101 demo