1

次の html ソース文字列があります。

<a href="mailto:abcd@test.com?body=This%20is%20the%20body%20-123-&subject=Subject%20Text&Content-Type=text/plain">Reply To Post</a>

上記の文字列から抽出したい:

  1. mailto: から ? までの部分のメールアドレス
  2. 主題

正規表現に関するヘルプをいただければ幸いです。前もって感謝します。

4

4 に答える 4

2

2番目の部分の正規表現は必要ありません。クエリ文字列IMOとして解析できます。

次のようなもの:(次のコード$sのの値です)href

preg_match("/mailto:(.*?)\?(.*)/",$s,$matches);

echo "Email:" . $matches[1] . "\n";
parse_str($matches[2],$output);
echo "Body: " . $output['body'] . "\n";
echo "Subject: " . $output['subject'] . "\n";

実際、文字列がまったく同じように表示されることが確実な場合は、「:」のインデックスのオフセットから「?」のインデックスまでのサブ文字列を取得することもできます。

于 2012-06-30T09:00:08.317 に答える
2

これは、mailto リンクが 1 つだけであることを前提としています。

// $str will be your string content from the question
if (preg_match('/"mailto:([^"]+?)/', $str, $matches) && false !== ($info = parse_url($matches[1]))) {
        $emailAddress = $info['path'];
        $emailParameters = array();
        if (isset($info['query'])) {
                parse_str($info['query'], $emailParameters);
        }
        var_dump($emailAddress, $emailParameters);
}

"mailto:最初の終了引用符まで一致しparse_url、残りを実行するために使用します。

于 2012-06-30T09:05:44.100 に答える
1

PHP で試したことはありませんが、Regex Heroでは問題なく動作します:

"mailto:([\w%.+-]+?@[\w.-]+?)(?:[?&](?:body=(.*?)|subject=(.*?)|[\w-]+=.*?))+?"

これにより、次のキャプチャ グループが生成されます。

  • 1: メールアドレス
  • 2: 本体
  • 3: 件名

ただし、すべての有効なメール アドレスを取得したかどうかわからないため、さらに集中的なテストを行うことをお勧めします。

于 2012-06-30T09:04:11.167 に答える
-1

これを試して

$m = preg_match("/mailto:(.+?)\?/");

これは、単語のmailto後にコロンが続き、任意の文字を.1 回以上+貪欲に含まないキャプチャ グループ (括弧) が続く (? - キャプチャを可能な限り短くします) と、それに続く (エスケープされた) 疑問符 ( \?)

于 2012-06-30T08:48:22.043 に答える