2011-12-22 33 views
14

Tôi muốn nhận các tập lệnh để tìm kiếm $ open_email_msg các email khác nhau sẽ có thông tin khác nhau nhưng có định dạng giống như dưới đây.Sử dụng regex trong chuỗi cho strpos()

Tôi chưa thực sự sử dụng regex nhiều, nhưng những gì tôi muốn làm là bất cứ khi nào tôi có nó để tìm kiếm chuỗi nó sẽ tìm kiếm "Title: [data for title]", "Categories: [data for categories] . tôi hỏi vì tôi không nghĩ cái gì đó như

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

sẽ thậm chí làm việc.

Đây chỉ là một đoạn của toàn bộ mã, phần còn lại sẽ chèn thông tin vào một bảng MySQL và sau đó được đăng tải một bài báo trên trang web.

Ai đó có thể giúp tôi tìm giải pháp điều này xin vui lòng?

Strict định dạng tin nhắn e-mail:

Tin tức Cập nhật
Tiêu đề: Điều
Thẻ Title: TAG1 TAG2
Thể loại: Điều Thể loại, 2nd Điều Thể loại
Snippet: Điều đoạn.
Thông báo: Bài viết. Hình ảnh. Thêm văn bản, văn bản khác. Lorem impsum dolor ngồi 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 
?> 

Trả lời

16

Hãy thử sử dụng PREG_OFFSET_CAPTURE cờ cho preg_match. Một cái gì đó như thế này:

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

Điều này sẽ cho bạn vị trí ban đầu của chuỗi.

Lưu ý rằng regex tôi đang sử dụng có thể sai và không tính đến kết thúc dòng và nội dung, nhưng đó là một chủ đề khác. :)

EDIT. Một giải pháp tốt hơn cho những gì bạn muốn (nếu tôi hiểu nó một cách chính xác) sẽ là một cái gì đó như thế này:

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

Sau đó, bạn sẽ nhận được danh hiệu vào biến $title, và một chuỗi rỗng nếu không có tựa đề đã được tìm thấy.

4

Bạn thể sử dụng preg_match, thay vì strpos cho regex

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

PREG_OFFSET_CAPTURE gives you the position of match. 
Các vấn đề liên quan