如何在php中使用preg_match_all拆分此字符串?

问题描述 投票:2回答:3

我需要分割字符串,如:

一些描述art.nr:4457 72 1x ACOUCH 90X200 NICE GRAY(3 colli)1x matras 85x205x12 2x matras 80x190x11部分规格14x Premium其他产品90x200x23 HR34

我需要的结果是:

  1. 一些描述art.nr:4457 72
  2. 1x ACOUCH 90X200 NICE GRAY(3 colli)
  3. 1x床垫85x205x12
  4. 2x matras 80x190x11一些规格
  5. 14x Premium其他产品90x200x23 HR34

为了使它更复杂,第一部分是可选的,但其他部分总是以'1x'开头。

我试过很多regexp,但我无法让它工作。我可以使用类似/\s?\d+x\s/之类的preg_split()作为解决方法,但这很脏,虽然它很好地分裂。

即使只是试图将部分分成2到5,我也说不出正确。

我已经在PHP中使用preg_match_all()在最不复杂的字符串上尝试了许多regexp模式:

1x ACOUCH 90X200 NICE GRAY(3 colli)1x matras 85x205x12 2x matras 80x190x11部分规格14x Premium其他产品90x200x23 HR34

以下模式最接近:

  • /(\d+x\s+.+?)(\s+(\d+x\s+.+?(?!\s\d+x\s)))+/i
  • /(\d+x\s+.+)(\s+(\d+x\s+.+))+/i

我认为它应该是这样的:/((\s+)?(\d+x\s+.+(?!\s\d+x\s)))+/i但它不能完成这项工作。

/(\s?\d+x\s+.+)+/i这样简单的只返回完整的字符串或只返回第一个字符/(\s?\d+x\s+.+?)+/i

我试过这些(和许多其他变种):

我究竟做错了什么?它让我疯狂;这真的不是我的第一个正则表达式!

(以及如何使用可选的第一部分使整个字符串工作)

提前致谢!

php regex regex-lookarounds
3个回答
© www.soinside.com 2019 - 2024. All rights reserved.