【发布时间】:2019-04-24 18:20:42
【问题描述】:
我需要拆分字符串,例如:
一些描述 art.nr:4457 72 1x ACOUCH 90X200 NICE GREY (3 colli) 1x matras 85x205x12 2x matras 80x190x11 一些规格 14x Premium otherproduct 90x200x23 HR34
我需要的结果是:
- 一些描述 art.nr: 4457 72
- 1x ACOUCH 90X200 NICE GREY (3 colli)
- 1x 矩阵 85x205x12
- 2x matras 80x190x11 一些规格
- 14x Premium otherproduct 90x200x23 HR34
为了让它更加复杂,第一部分是可选的,但其他部分总是以'1x'左右开头。
我尝试了很多正则表达式,但我无法让它工作。我可以将 preg_split() 与/\s?\d+x\s/ 之类的东西一起使用作为解决方法,但这确实很脏,尽管它分裂得很好。
即使只尝试将第 2 部分拆分到第 5 部分,我也无法正确完成。
我在 php 中用 preg_match_all() 在最简单的字符串上尝试了许多正则表达式模式:
1x ACOUCH 90X200 NICE GREY (3 colli) 1x matras 85x205x12 2x matras 80x190x11 一些规格 14x Premium otherproduct 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
我做错了什么?它让我疯狂;这真的不是我的第一个正则表达式!
(以及如何使用可选的第一部分使其适用于完整字符串)
提前致谢!
【问题讨论】:
-
使用\s+(?=\d+x\s)分割
-
谢谢!这确实有效!
-
非常感谢大家的快速和良好的回答。这真的帮助了我! xxx
标签: php regex regex-lookarounds