PHP:preg_replace()破折号应为日期


PHP: preg_replace() dash expect for dates

好吧,我得到了以下重写的URL示例:

/Alfa-Romeo/Brera/06-2006-07-2008/2.4-JTDM-200-PK

这只是一个很好的URL,但要找到我的车辆,我需要以下与我的数据库相对应的值。因此我使用这个代码。

$value = preg_replace('/(?<!'d{4})-/', ' ', $value);

它将返回以下内容,在斜线后面我将写下预期值

  1. 阿尔法·罗密欧
  2. 布雷拉
  3. 2006-07 2008/06 2006-07 2008
  4. 2.4 JTDM 200 PK

我得到了正确的结果,但当我转到下一个例子时,这里是哪里出了问题:

/Alfa-Romeo/Brera/07-2008-/1750-TB-200-PK

退货/预期

  1. 阿尔法·罗密欧
  2. 布雷拉
  3. 2008年7月至2008年7日-
  4. 1750 TB 200 PK/1750 TB 200 PK

结果是合乎逻辑的,因为我的preg_replace是用空格替换任何破折号,当后面有四个数字和一个破折号时除外。但在这种情况下,我不希望"1750"后面的破折号也看到上面的粗体。

因此,我需要扩展这个preg_replace,使其只保留日期格式的短划线。一些日期格式是:

  1. 2005年7月-2010年8月
  2. 2012-2015
  3. 2012年-
  4. 2005年至2010年7月

正如你所看到的,有时在冲刺之后什么都没有,有时只有一年或一年零一个月。如何删除"1750"后面的破折号(见上图粗体)?

根据您发布的内容,可能是

(?<='d{4})-(?=[a-zA-Z])|(?<!'d{4})-

演示