2015-03-19 3 views
0

Allright Я получил следующий rewritted URL examaples:PHP: preg_replace() тир ожидать даты

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

Это только URL-бы хорошо, но, чтобы найти свои транспортные средства, которые мне нужно следующие значения Wich корреспондента моего база данных. Поэтому я использую этот код.

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

Она возвращает следующее и за косой чертой запишу ожидаемое значение

  1. Alfa Romeo/Альфа Ромео
  2. Brera/Brera
  3. 06 2006-07 2008/06 2006-07 2008
  4. 2,4 JTDM 200 ПК/2,4 JTDM 200 ПК

Im получая правильный результат, но когда я иду к следующему примеру, вот что происходит не так:

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

Возвращения/Ожидать

  1. Alfa Romeo/Альфа Ромео
  2. Brera/Brera
  3. 07 2008-
  4. /07 2008-
  5. 1750-ТБ 200 ПК/1750 TB 200 ПК

В результате логика, так как моя preg_replace заменяет любую тире пробелом, ожидая, когда будут четыре цифры, за которыми следует тире. Но в этом случае я не хочу, чтобы тире за «1750» см. Выше.

Поэтому мне нужно расширить этот preg_replace, чтобы он сохранял тире только для формата даты. Некоторые из форматов даты являются:

  1. 07 2005-08 2010
  2. 2012-2015
  3. 2012-
  4. 07 2005-2010

Как вы можете видеть, иногда после тире нет ничего, а иногда есть только год или год и месяц. Как я могу удалить тире за «1750», см. Жирный выше?

+0

является тире всегда следует буква в случае '1750-TB', но не для форматов даты? –

ответ

1

основан на том, что вы в курсе, может быть,

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

Demo

+0

Это действительно решение! Спасибо – Jordy