Не знаком с regex_replace
, я буду использовать функцию PHP preg_replace
, и вы сможете соответственно адаптировать:
$truncated = preg_replace('/^(.{100}.*?\.).*$/s', '$1', $long);
Редактировать: я не знаю, что случилось с подсветкой синтаксиса на выходеобрабатывая всю вещь как строку, она прекрасно выглядит в предварительном просмотре.
И еще одна версия, которая будет стараться не разбивать числа с десятичной точкой (или в других местах, где точка может возникнуть где-то в другом месте).чем конец предложения):
$truncated = preg_replace('/^(.{100}.*?\.(?![a-z0-9])).*$/s', '$1', $long);
Объяснение:
- Часть, которую вы хотите сохранить, сгруппирована с круглыми скобками.
- Вы сохраните вне менее 100 символов:
.{100}
- После этого вы будете сохранять любые следующие символы до первого десятичного знака:
.*?\.
- Во второй версии я использовал отрицательный прогноз -
(?![a-z0-9])
- который заставит последнюю часть перейти к следующему десятичному знаку, если за символом точки следует либо цифра, либо буква. - Точка соответствует новой строке (модификатор
s
в концешаблон).Если функция Movable Type regex_replace
берет шаблон без разделителей (начальная косая черта и конечный /s
в моем шаблоне), вы можете вместо этого использовать (?s)
в начале шаблона. - Использовать
$1
в замене сохранить первую захваченную группу.