2011-12-22 21 views
14

Desidero ottenere gli script per cercare $ open_email_msg quali e-mail differenti avranno informazioni diverse ma lo stesso formato di seguito.Uso di espressioni regolari in una stringa per strpos()

Non ho usato molto regex, ma quello che voglio fare è che ogni volta che lo faccio per cercare la stringa cercherà "Titolo: [dati per titolo]", "Categorie: [dati per categorie] . chiedo perché non credo che qualcosa di simile

strpos($open_email_msg, "Title: (*^)"); 

sarebbe nemmeno lavorare.

Questo è solo un frammento di tutto il codice, il resto inserisce le informazioni in una tabella MySQL e poi viene inviato a un articolo di notizie sul sito

Qualcuno può aiutarmi a trovare una soluzione a questo per favore?

Strict e-mail formato del messaggio:

News Update
Titolo: Titolo articolo
Tags: tag1 tag2
Categorie: Articolo Categoria, 2 ° Categoria articolo
Snippet: Articolo snippet.
Messaggio: messaggio articolo. Immagini. Altro testo, altro testo. Lorem Impsum dolor sit amet.

<?php 
    //These functions searches the open e-mail for the the prefix defining strings. 
     //Need a function to search after the space after the strings because the subject, categories, snippet, tags and message are constant-changing. 
    $subject = strpos($open_email_msg, "Title:");  //Searches the open e-mail for the string "Title" 
     $subject = str_replace("Title: ", "" ,$subject); 
    $categories = strpos($open_email_msg, "Categories:");  //Searches the open e-mail for the string "Categories" 
    $snippet = strpos($open_email_msg,"Snippet");   //Searches the open e-mail for the string "Snippet" 
    $content = strpos($open_email_msg, "Message"); //Searches the open-email for the string "Message" 
    $tags = str_replace(' ',',',$subject); //DDIE 
    $uri = str_replace(' ','-',$subject); //DDIE 
    $when = strtotime("now"); //date article was posted 
?> 

risposta

16

Provare a usare la bandiera PREG_OFFSET_CAPTURE per preg_match. Qualcosa del genere:

preg_match('/Title: .*/', $open_email_msg, $matches, PREG_OFFSET_CAPTURE); 
echo $matches[0][1]; 

Questo dovrebbe darvi la posizione iniziale della stringa.

Si noti che la regex che sto utilizzando potrebbe essere errata e non tenere conto di terminazioni di linea e cose, ma questo è un altro argomento. :)

MODIFICA. Una soluzione migliore per ciò che si vuole (se ho capito bene) sarebbe qualcosa di simile:

$title = preg_match('/Title: (.*)/', $open_email_msg, $matches) ? $matches[1] : ''; 

Farebbe quindi ottenere il titolo nella variabile $title, e una stringa vuota se è stato trovato nessun titolo.

4

È possibile utilizzare preg_match invece di strpos per regex

preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE); 

PREG_OFFSET_CAPTURE gives you the position of match.