2011-12-22 22 views
14

Quiero obtener las secuencias de comandos para buscar $ open_email_msg, que diferentes correos electrónicos tendrán información diferente pero con el mismo formato que a continuación.Usar expresiones regulares en una cadena para strpos()

Realmente no he usado mucho la expresión regular, pero lo que quiero hacer es que cada vez que lo tengo para buscar la cadena busque "Título: [datos para el título]", "Categorías: [datos para categorías] . me pregunto porque no creo que algo así como

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

habría incluso trabajar.

Esto es sólo un fragmento de todo el código, el resto inserta la información en una tabla de MySQL y luego se publica a un artículo de noticias en el sitio.

¿Alguien puede ayudarme a encontrar una solución? a esto por favor?

correo electrónico formato de mensaje estricta:

News Update
Título: Título del artículo
Etiquetas: tag1 tag2
Categorías: Categoría del artículo, el artículo segundo Categoría
Fragmento: artículo fragmento.
Mensaje: Mensaje de artículo. Imágenes. Más texto, más texto. 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 
?> 

Respuesta

16

Trate de usar la bandera PREG_OFFSET_CAPTURE para preg_match. Algo como esto:

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

Esto debería darle la posición inicial de la cadena.

Tenga en cuenta que la expresión regular que estoy utilizando podría ser incorrecta y no tener en cuenta los finales de línea y esas cosas, pero ese es otro tema. :)

EDIT. Una mejor solución para lo que quiere (si he entendido bien) sería algo como esto:

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

Se podría entonces obtener el título en la variable $title, y una cadena vacía si no se encontró ningún título.

4

Puede utilizar preg_match en lugar de expresiones regulares para strpos

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

PREG_OFFSET_CAPTURE gives you the position of match. 
Cuestiones relacionadas