$ open_email_msgを検索するスクリプトを取得したいのですが、電子メールごとに情報は異なりますが、フォーマットは同じです。
私は実際には正規表現をあまり使用していませんが、「タイトル:[タイトルのデータ]」、「カテゴリ:[カテゴリのデータ]」を検索する文字列を検索するときはいつでもしたいのです。私は何かのようなことを考えていないので
strpos($open_email_msg, "Title: (*^)");
うまくいくだろう。
これはコード全体のほんの一部です。残りは情報をMySQLテーブルに挿入し、サイトのニュース記事に投稿されます。
誰かがこれの解決策を見つけるのを手伝ってくれる?
厳格な電子メールメッセージの形式:
ニュースの更新
タイトル:記事のタイトル
タグ:tag1 tag2
カテゴリ:記事カテゴリ、2番目の記事カテゴリ
スニペット:記事のスニペット。
メッセージ:記事メッセージ。画像。より多くのテキスト、より多くのテキスト。 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
?>
PREG_OFFSET_CAPTURE
にpreg_match
フラグを使用してみてください。このようなもの:
preg_match('/Title: .*/', $open_email_msg, $matches, PREG_OFFSET_CAPTURE);
echo $matches[0][1];
これにより、文字列の最初の位置がわかります。
私が使用している正規表現は間違っている可能性があり、行末などを考慮に入れていない可能性がありますが、それは別の問題です。 :)
[〜#〜]編集[〜#〜]。あなたが望むもののためのより良い解決策(私がそれを正しく理解しているなら)は次のようなものです:
$title = preg_match('/Title: (.*)/', $open_email_msg, $matches) ? $matches[1] : '';
次に、タイトルを$title
変数に取得し、タイトルが見つからなかった場合は空の文字列を取得します。
正規表現にstrposの代わりにpreg_matchを使用できます
preg_match (regex, $string, $matches, PREG_OFFSET_CAPTURE);
PREG_OFFSET_CAPTURE gives you the position of match.