4

テキストの文字列から URL の配列を取得する方法を見つけようとしています。テキストは次のようにフォーマットされます。

ここにランダムなテキストがあります

http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphones-bezel-a-massive-notification-light/?grcc=88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2=835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033fdeed202~510f37324b14c50a5e9121f955fac3fa ~1342747216490~0~0~0~0~0~0~0~0~7~3~

http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tickets-for-disrupt-sf/

明らかに、これらのリンクは何でもかまいません (そして、多くのリンクが存在する可能性があります。それらは、現在テストしているものにすぎません。正規表現のような単純な URL を使用すると、正常に動作します。

私は使っている:

preg_match_all('((https?|ftp|gopher|telnet|file|notes|ms-help):'.
    '((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)',
    $bodyMessage, $matches, PREG_PATTERN_ORDER);

print_r( $matches);が得る結果は次のとおりです。

Array ( [0] => Array (
    [0] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon=
    [1] => http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= 
    [2] => http://techcrunch.co=
    [3] => http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-ip= 
    [4] => http://techcrunch.com/2012/07/20/last-day-to-purc=
    [5] => http://tec=
)
...

その配列内のこれらのアイテムはどれも、上記のリンクからの完全なリンクではありません。

必要なものを取得する良い方法を知っている人はいますか? PHPのリンクを取得するための正規表現をたくさん見つけましたが、どれも機能しません。

ありがとう!

編集:

わかりましたので、これらのリンクを電子メールから取得します。スクリプトは電子メールを解析し、メッセージの本文を取得してから、そこからリンクを取得しようとします。メールを調べたところ、何らかの理由で URL の途中にスペースが追加されているようです。これは、私の PHP スクリプトから見た本文メッセージの出力です。

 --00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 

URL を壊さないようにする方法について何か提案はありますか?

編集2

ローネットの提案に従って、次のコードを実行しました。

 $bodyMessage = str_replace("= ", "",$bodyMessage);

ただし、それをエコーすると、「=」を置き換えたくないようです

 --00248c711bb99ca36d04c54ba5c6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable http://techcrunch.com/2012/07/20/kickstarter-flashr-wants-to-make-the-iphon= es-bezel-a-massive-notification-light/?grcc=3D88888Z0ZwdgtZ0Z0Z0Z0Z0&grcc2= =3D835637c33f965e6cdd34c87219233711~1342828462249~fca4fa8af1286d8a77f26033f= deed202~510f37324b14c50a5e9121f955fac3fa~1342747216490~0~0~0~0~0~0~0~0~7~3~ http://techcrunch.com/2012/07/20/last-day-to-purchase-extra-early-bird-tick= ets-for-disrupt-sf/ --00248c711bb99ca36d04c54ba5c6 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 
4

4 に答える 4

9
    /**
     *
     * @get URLs from string (string maybe a url)
     *
     * @param string $string

     * @return array
     *
     */
    function getUrls($string) {
        $regex = '/https?\:\/\/[^\" ]+/i';
        preg_match_all($regex, $string, $matches);
        //return (array_reverse($matches[0]));
        return ($matches[0]);
}
于 2012-07-21T00:48:55.603 に答える
0

次のコードを使用すると、配列 urls_in_string が見つかり、ゼロ インデックス $urls_in_string[0] ですべての URL が見つかります。

    $urls_in_string = [];
    $string_with_urls = "Worlds most popular socila networking website in https://www.facebook.com. We have many such othe websites like https://twitter.com/home and https://www.linkedin.com/feed/ etc.";
    $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\/\S*)?/im";
    preg_match_all($reg_exUrl, $string_with_urls, $urls_in_string);
    print_r($urls_in_string);




// OutPut 
/*
Array
(
    [0] => Array
        (
            [0] => https://www.facebook.com
            [1] => https://twitter.com/home
            [2] => https://www.linkedin.com/feed/
        )

    [1] => Array
        (
            [0] => https
            [1] => https
            [2] => https
        )

    [2] => Array
        (
            [0] => 
            [1] => /home
            [2] => /feed/
        )

)
*/
于 2021-08-27T07:49:02.123 に答える