Не получается составить шаблон для последней части строки.
$string = '201706151400_NEW_SIL_db-n8-stanc_DBCollectorConf_HUB_SQL_ST_MSI_VIEW_TEST_dima.gz';
$newstring = preg_replace('/(NEW_|_DBCollectorConf|\.gz)/', '',$string);
Как не пробовал - не могу подобрать шаблон, чтобы попадала еще только последняя часть строки: "_dima".
В ней может содержаться цифры или буквы любой длины.
Ответ
В изначальном варианте '/(NEW_|_DBCollectorConf|\.gz)/ находит следующие подстроки
NEW_ - подстрока NEW_
_DBCollectorConf - подстрока _DBCollectorConf
\.gz - подстрока .gz
Если нужно оставить всё как есть, и разрешить опциональное совпадение _ + 1 и более символов, отличных от _ перед .gz, нужно использовать
'~NEW_|_IUMCollectorConf|(?:_[^_]+)?\.gz~'
^^^^^^^^^^^
См. демо
(?:_[^_]+)? является незахватывающей группой ((?:...)?, не создаёт буфера в памяти для части совпадения), которая находит 1 или 0 совпадений _, после которого следует 1 и более символов, отличных от _ ([^_]+).
Комментариев нет:
Отправить комментарий