Vous n'êtes pas familier avec regex_replace
, je vais utiliser la fonction PHP preg_replace
et vous pouvez adapter en conséquence:
$truncated = preg_replace('/^(.{100}.*?\.).*$/s', '$1', $long);
Edit: Je ne sais pas ce qui est avec la coloration syntaxique sur la sortie traiter la chose entière comme une chaîne, il semble bien dans l'aperçu.
Et une autre version, qui va essayer d'être intelligent de ne pas briser les nombres avec un point décimal (ou d'autres endroits une période pourrait se produire quelque part autre que la fin d'une phrase):
$truncated = preg_replace('/^(.{100}.*?\.(?![a-z0-9])).*$/s', '$1', $long);
Explication:
- La partie que vous souhaitez conserver est regroupée avec des parenthèses.
- Vous allez garder au moins 100 caractères:
.{100}
- Vous pourrez ensuite conserver les caractères suivants jusqu'au premier point décimal:
.*?\.
- Dans la deuxième version, j'ai utilisé un lookahead- négatif
(?![a-z0-9])
-qui sera faire en sorte que la dernière partie continue à la décimale suivante si le caractère de période est suivi d'un nombre ou d'une lettre. Le point correspond à la nouvelle ligne (le modificateur s
à la fin du motif).
- Si la fonction
regex_replace
de Movable Type prend un motif sans délimiteurs (la barre oblique et le suivi /s
dans mon motif), vous pouvez utiliser (?s)
au début du motif.
- Utilisez
$1
dans le remplacement pour conserver le premier groupe capturé.