为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
POPMUISE 2021-04-30 18:18:35
我需要像这样拆分字符串:一些说明art.nr:4457 72 1x ACOUCH 90X200 NICE GREY(3 colli)1x matras 85x205x12 2x matras 80x190x11一些规格14x Premium其他产品90x200x23 HR34我需要的结果是:一些描述art.nr:4457 721x ACOUCH 90X200尼斯灰色(3 colli)1个Matras 85x205x122x 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)https://www.functions-online.com/preg_match_all.html我究竟做错了什么?它让我疯狂; 这真的不是我的第一个正则表达式!(以及如何使它适用于带有可选的第一部分的完整字符串)提前致谢!
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

只是分裂

(?=\b\d+[xX]\b)

请参阅regex101.com上的演示


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信