Страницы

Поиск по вопросам

суббота, 13 июля 2019 г.

Регулярка - выбрать по шаблону с конца строки

Не получается составить шаблон для последней части строки.
$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 и более символов, отличных от _ ([^_]+).

Комментариев нет:

Отправить комментарий