我有一堆产品名称,我需要从中提取其中的SKU。
所以以下面的标题为例:
- 258权力的游戏
- E457口袋妖怪
- 293A羊毛床罩
- 572 C钢框架(无论什么)
因此,在上述示例中,SKU分别为258
、E457
、293A
和572 C
。
一般来说,SKU或者是全数字(主要是3或4个字符长),或者是字母E后面再跟着3 - 4个数字,或者是3 - 4位数字后面跟着单个字母,或者是单个空格和单个字母。
因此,我想出了这个模式,似乎可以很好地识别上述所有情况:/^E?\d+ ?.?/
https://regex101.com/r/I7kkDP/2
然后,有一些完全混乱的标题,它们的SKU在中间的某个地方......据我所知,这种情况很少见,当它们发生时,只有数字,所以没有E开头,也没有单个字母结尾。下面是两个这样的例子:
- 装饰枕头/带床罩的套装
2456
55 X55cm - 枕头
207
45 x 65厘米
幸运的是,在这些罕见的情况下,SKU是标题中遇到的第一个整数。
所以,我需要的是preg_replace
来修复上面完全混乱的标题,这样我的模式就可以正确地提取SKU。
先谢谢你了。
2条答案
按热度按时间brgchamk1#
使用单词边界(
\b
)将SKU与任何其他字符区分开来,然后检查您的定义字符。边界将确保您不会错误地将
258 G
与258 Game of Thrones
匹配。https://3v4l.org/rCEqD
kgsdhlau2#
我可以回答RegEx模式部分:
(E?\d{3,4} ?[A-Z]?(?=\s))
,在https://regex101.com处使用以下文本块进行测试: