php匹配正则表达式以分割最后一个点,冒号或下划线(使用preg_match)

时间:2016-12-14 11:52:02

标签: php regex preg-match

我们有数千行数据,其中包含各种格式的文章库,我需要从尺寸指示器中拆分主文章编号。在最后几个字符之间(几乎)总是有点,短划线或下划线(不总是2)。

简而言之:数据是主要商品编号+尺寸指标,隔板不同但是3个中的1个。-_

问题:如何拆分主要文章编号+尺寸指示?我的下面的正则表达式并不是我基于某些Google构建的。

preg_match('/^(.*)[\.-_]([^\.-_]+)$/', $sku, $matches);

样本数据+预期结果

AR.110052.15-40 [AR.110052.15 & 40]
BI.533.41-41 [BI.533.41 & 41]
CG.00554.000-39 [CG.00554.000 & 39]
LL.PX00.SC004-40 [LL.PX00.SC004 & 40]
LOS.HAPPYSOCKS.1X [LOS.HAPPYSOCKS & 1X]
MI.PMNH300043-XXXXL [MI.PMNH300043 & XXXXL]

1 个答案:

答案 0 :(得分:2)

您需要将-移动到字符类的末尾,以使正则表达式引擎将其解析为字面连字符:

^(.*)[._-]([^._-]+)$

请参阅regex demo。实际上,即使^(.+)[._-](.+)$也可以。

  • ^ - 匹配字符串的开头
  • (.*) - 第1组尽可能多地捕获任何0+字符...
  • [._-] - ._-
  • ([^._-]+) - 第2组:._-以外的一个或多个字符
  • $ - 字符串结束。