猿问

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

我需要像这样拆分字符串:

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

我需要的结果是:

  1. 一些描述art.nr:4457 72

  2. 1x ACOUCH 90X200尼斯灰色(3 colli)

  3. 1个Matras 85x205x12

  4. 2x Matras 80x190x11一些规格

  5. 14x高级其他产品90x200x23 HR34

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

我尝试了许多正则表达式,但无法使其正常工作。我可以将preg_split()与类似的/\s?\d+x\s/解决方法一起使用,但这确实很脏,尽管它可以很好地拆分。

即使仅尝试将部分2分割为5,我也无法正确处理。

我在最小复杂的字符串上用过preg_match_all()在php中尝试了许多正则表达式模式:

1x ACOUCH 90x200尼斯灰色(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

我在以下方面尝试了这些(以及许多其他变体):

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

(以及如何使它适用于带有可选的第一部分的完整字符串)

提前致谢!


POPMUISE
浏览 166回答 3
3回答

尚方宝剑之说

只是分裂(?=\b\d+[xX]\b)请参阅regex101.com上的演示。
随时随地看视频慕课网APP
我要回答