使用最后出现的点、冒号或下划线拆分字符串的正则表达式

2022-03-29 00:00:00 regex php preg-match
我们有数千行数据,其中包含各种格式的文章枚举,我需要将主要文章编号从大小指示器中分离出来。在一些最后的字符之间(几乎)总是有点、破折号或下划线(不总是2)。

简而言之:数据为主文编号+大小指标,分隔符不同,只有1/3。-_

问题:如何拆分正文编号+大小指标?我的下面的正则表达式不能正常工作,这是我基于某个Google-ing构建的。

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]

解决方案

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

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

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

  • ^-匹配字符串的开头
  • (.*)-组1捕获任意0+个字符,直到最后一个.
  • [._-]-._-
  • ([^._-]+)-组2:._-以外的一个或多个字符
  • $-字符串结尾。

相关文章