我需要像这样拆分字符串:
一些说明art.nr:4457 72 1x ACOUCH 90X200 NICE GREY(3 colli)1x matras 85x205x12 2x matras 80x190x11一些规格14x Premium其他产品90x200x23 HR34
我需要的结果是:
一些描述art.nr:4457 72
1x ACOUCH 90X200尼斯灰色(3 colli)
1个Matras 85x205x12
2x Matras 80x190x11一些规格
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
我在以下方面尝试了这些(以及许多其他变体):
https://regex101.com/r/9nhkxJ/1 (仅适用于preg_match)
我究竟做错了什么?它让我疯狂; 这真的不是我的第一个正则表达式!
(以及如何使它适用于带有可选的第一部分的完整字符串)
提前致谢!
尚方宝剑之说