Question

Je suis analyse quelques e-mails. Mobile Mail, iPhone et iPod touch je suppose append une signature comme une frontière distincte, ce qui rend simple à enlever. Tous les clients de messagerie ne, et utilisez simplement « - » comme séparateur de signature

.

Je dois couper le « - » d'une chaîne, mais seulement la dernière occurrence de celui-ci

.

copie de l'échantillon

 hello, this is some email copy-- check this out
 --
 Tom Foolery

Je thougth sur le partage sur « - », en supprimant la dernière partie, et je l'aurais, mais exploser () et split () ne semblent revenir de grandes valeurs pour me faire savoir si elle a fait quoi que ce soit, en cas il n'y a pas un match.

Je ne peux pas preg_replace aller dans plus d'une ligne. J'ai normalisé toutes les fins de ligne \ n

Quelle est la meilleure suggestion pour finir avec « Bonjour, je suis un peu email copy-- vérifier cela », qui ne participent pas, il y aura des cas où il n'y a pas de signature, et il y a bien sûr va être les cas où Je ne peux pas couvrir tous les cas.

Était-ce utile?

La solution 4

Je pense que dans l'intérêt d'être plus l'épreuve des balles, je vais prendre la route non regex

        echo substr($body, 0, strrpos($body, "\n--"));

Autres conseils

En fait, delimiter signature correcte est "-- \n" (notez l'espace avant newline) , devrait donc être '^-- $' le délimiteur regexp. Bien que vous pouvez envisager d'utiliser '^--\s*$', donc il va travailler avec OE, qui se trompe.

Essayez ceci:

preg_replace('/--[\r\n]+.*/s', '', $body)

Ceci enlèvera tout après la première apparition de -- suivi d'un ou plusieurs caractères de saut de ligne. Si vous voulez juste supprimer la dernière occurence, utilisez /.*--[\r\n]+.*/s à la place.

Au lieu de couper juste après tout - que vous pourriez mettre en cache les derniers e-mails envoyés par cet utilisateur ou d'un service et comparer. Le bit en bas qui ressemble les autres peuvent être retiré en toute sécurité en laissant le message approprié intact.

Cela semble me donner le meilleur résultat:

$body = preg_replace('/\s*(.+)\s*[\r\n]--\s+.*/s', '$1', $body);

  • Il correspondra et couper le dernier "(saut de ligne) - (option / espaces blancs) (signature des sauts de ligne)"
  • Couper toutes les nouvelles lignes restantes avant la signature
  • début Garniture / fin des espaces dans le corps (restant newlines avant la signature, les espaces au début du corps, etc)
  • ne fonctionnera que s'il y a un texte (non-espace) avant la signature (sinon il ne supprimera pas la signature et le retourner intact)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top