Попытка просто использовать preg_replace для внесения изменений в строку (добавление html разрыва строки), которая содержит форматы года, такие как 2018
1950-2018
и 1950 - 2018
$j = preg_replace('/([0-9]{4}) - ([0-9]{4})/', '<br>* ${1} - ${2}</strong>', $j);
$j = preg_replace('/([0-9]{4})-([0-9]{4})/', '<br>* ${1} - ${2}', $j);
$j = preg_replace('/\s+(19[5-9][0-9]|20(0[0-9]|10))\s+/', '<br>* ${1} </strong>', $j);
Моим предпочтением будетрегулярное выражение в годах 1950
- 2020
Первые два работают нормально (хотя у меня были проблемы с определением диапазона), но последний перехватывает все экземпляры
как:
* 2007
** 2008 - 2013
и т. Д.
Пробовал использовать ^
и $
для обозначения начала и конца ... но третий всегда совпадает с первыми двумя.
Как я могу полностью разделить эти форматы года, чтобы я мог индивидуально изменить каждый из них по отдельности?
Пример кода:
<?php
$string = 'Detailed Applications: 2005-2006 Volkswagen | 2006 Volkswagen Golf 2.0L 1984CC 121Cu. In. l4 GAS SOHC Naturally Aspirated | 2005 Volkswagen Beetle 2.0L 1984CC 121Cu. In. l4 GAS DOHC Naturally Aspirated | 2005 - 2006 Volkswagen Golf';
echo $string;
echo '<br><br>';
$string = preg_replace('/([0-9]{4}) - ([0-9]{4})/', '<br /><strong>(YYYY - YYYY)* ${1} - ${2}</strong>', $string);
$string = preg_replace('/([0-9]{4})-([0-9]{4})/', '<br /><strong>(YYYY-YYYY)* ${1} - ${2}</strong>', $string);
$string = preg_replace('/(\d19[5-9][0-9]|20[0-9][0-9])(?!\s?-)/', '<br /><strong>(YYYY)* ${1} </strong>', $string);
echo $string;
Выходы
Detailed Applications:
(YYYY-YYYY)* 2005 -
(YYYY)* 2006 Volkswagen |
(YYYY)* 2006 Volkswagen Golf 2.0L 1984CC 121Cu. In. l4 GAS SOHC Naturally Aspirated |
(YYYY)* 2005 Volkswagen Beetle 2.0L 1984CC 121Cu. In. l4 GAS DOHC Naturally Aspirated |
(YYYY - YYYY)* 2005 -
(YYYY)* 2006
Извините, действительно запутался.
По сути, я пытаюсь зациклить его и просто сделать разрыв строки (без разрыва строки) ... очевидно, с моим регулярным выражением он выводит каждый из них на отдельной строке ...
Пытаясь получить такой вывод
Detailed Applications:
(YYYY-YYYY)* 2005 - 2006 Volkswagen |
(YYYY)* 2006 Volkswagen Golf 2.0L 1984CC 121Cu. In. l4 GAS SOHC Naturally Aspirated |
(YYYY)* 2005 Volkswagen Beetle 2.0L 1984CC 121Cu. In. l4 GAS DOHC Naturally Aspirated |
(YYYY - YYYY)* 2005 - 2006
Bно да .. вот лучшее, что я получил
$j = preg_replace('/([0-9]{4}) - ([0-9]{4})/', '<br /><strong>* ${1} - ${2}</strong>', $j);
$j = preg_replace('/([0-9]{4})-([0-9]{4})/', '<br /><strong>* ${1} - ${2}</strong>', $j);
$j = preg_replace('/(19[5-9][0-9]|20(0[0-9]|20))(?!\s?-)/', '<br /><strong>* ${1} </strong>', $j);
Итак, вот фактическая выдержка из моего сценария
2007 Chevy Silverado Pickup new body style models 2008-2013 Chevy Silverado All Models 2014 Chevy Silverado 2500HD 3500HD 2007 GMC Sierra Pickup new body style models 2008-2013 GMC Sierra All Models 2014 GMC Sierra 2500HD 3500HD 2007-2013 Chevy Tahoe 2007-2013 Chevy Suburban 2007-2013 Chevy Avalanche 2007-2013 GMC Yukon Yukon XL Yukon Denali
Выпрямите все на одну строку (выложил приведенный выше пример сценарияпотому что эта строка не включает YYYY - YYYY
вариант ...)
Он выводит вот так
* 2007 Chevy Silverado Pickup new body style models
* 2008 - 2013 Chevy Silverado All Models 2014 Chevy Silverado 2500HD 3500HD
* 2007 GMC Sierra Pickup new body style models
* 2008 - 2013 GMC Sierra All Models 2014 GMC Sierra 2500HD 3500HD
* 2007 - 2013 Chevy Tahoe
* 2007 - 2013 Chevy Suburban
* 2007 - 2013 Chevy Avalanche
* 2007 - 2013 GMC Yukon Yukon XL Yukon Denali
Все хорошо, кроме * 2008 - 2013 Chevy Silverado All Models 2014 Chevy Silverado 2500HD 3500HD
2014
не разбивается нановая строка ... и я также не могу понять, как сделать диапазон лет (дох!), даже ссылаясь на это регулярное выражение javascript проверки лет в диапазоне