2010-04-26 8 views
0

j'ai ce texte:Expression régulière et retour à la ligne

<[email protected]> If you do so, please include this problem report. 
<[email protected]> You can delete your 

texte du message retourné ci-joint.

    The mail system 

<[email protected]>: connect to *.net[82.*.86.*]: Connection timed 
out 

je dois analyser email de celui-ci. Pourriez-vous m'aider avec ce travail?


UPD

Il pourrait y avoir une autre adresse e-mail dans <% ici%>. Il devrait y avoir une connexion entre le texte "Le système de messagerie". J'ai besoin dans l'email qui va après ce texte.

Répondre

3

Compte tenu de ce texte est stocké dans le texte $, qu'en ceci:

$matches = array(); 
if (preg_match('/<([^>]+)>/', $text, $matches)) { 
    var_dump($matches[1]); 
} 

Ce qui me donne:

string '[email protected]' (length=13) 


Fondamentalement, j'ai utilisé une expression régulière assez simple, qui correspond à:

  • un < caractère
  • tout ce qui est pas un > caractère: [^>]
    • au moins une fois: [^>]+
    • capturant: ([^>]+)
  • un > caractère

Ainsi, il capte tout ce qui est entre < et >.


Modifier après les commentaires + édition de l'OP:

Si vous ne souhaitez que l'adresse e-mail qui est après Le système de messagerie, vous pouvez utiliser ceci:

$matches = array(); 
if (preg_match('/The mail system\s*<([^>]+)>/', $text, $matches)) { 
    var_dump($matches[1]); 
} 

En plus de ce que j'ai posté auparavant, cela devrait:

  • La chaîne The mail system
  • Un nombre quelconque de blanc-caractères: \s*
+0

Il pourrait y avoir un autre courriel dans les freins: <[email protected]>. Il devrait y avoir une connexion entre, par exemple, le texte 'Mail system' et l'email – Ockonal

+0

Hu ... pas tout à fait sûr de ce que vous voulez, alors ... Pouvez-vous éditer votre question, pour nous donner quelques exemples supplémentaires, avec les attentes les sorties ? –

+0

S'il vous plaît, voir mise à jour post. – Ockonal

2

Vous voulez utiliser preg_match() et regardant cette entrée, il devrait être simple:

<?php 

if (preg_match('/<([^>]*[email protected][^>]*>/', $data, $matches)) { 
    var_dump($matches); // specifically look at $matches[1] 
} 

Il existe d'autres modèles qui correspondraient vous n'avez pas à vous en tenir au même modèle. Les '<' et '>' dans votre saisie sont utiles ici.