2016-08-24 13 views
1

私はこの正規表現#^https?://twitter\.com/(?:\#!/)?(\w+)/status(es)?/(\d+)$#is正規表現:URL

とメッセージで、見つかった場合は、つぶやきのURLを取得しようとしているから、ツイートのユーザー名とIDを抽出しかし、私の正規表現は、つぶやきのURLのためにフェッチすることは正しくないようです。以下は、パターンが最初から最後まで一致しなければならないことを意味し、あなたの正規表現でanchorsを含めているので、あなたが期待するよう、これは動作しないでしょう理由は私の完全なコード

function gettweet($string) 
{ 
    $regex = '#^https?://twitter\.com/(?:\#!/)?(\w+)/status(es)?/(\d+)$#is'; 
    $string = preg_replace_callback($regex, function($matches) { 
     $user = $matches[2]; 
     $statusid = $matches[3]; 
     $url = "https://twitter.com/$user/status/$statusid"; 
     $urlen = urlencode($url); 
     $getcon = file_get_contents("https://publish.twitter.com/oembed?url=$urlen"); 
     $con = json_decode($getcon, true); 
     $tweet_html = $con["html"]; 
     return $tweet_html; 
    }, $string); 
    return $string; 
} 

$message="This is absolutely trending can you also see it here https://twitter.com/itslifeme/status/765268556133064704 i like it"; 
$mes=gettweet($message); 
echo $mes; 

答えて

1

です。

アンカーを除去することにより、それが一致する

...

$regex = '#https?://twitter\.com/(?:\#!/)?(\w+)/status(es)?/(\d+)#is'; 
$string = "This is absolutely trending can you also see it here https://twitter.com/itslifeme/status/765268556133064704 i like it"; 

if (preg_match($regex, $string, $match)) { 
    var_dump($match); 
} 

上記のコードは、私たちを与える...

 
array(4) { 
    [0]=> 
    string(55) "https://twitter.com/itslifeme/status/765268556133064704" 
    [1]=> 
    string(9) "itslifeme" 
    [2]=> 
    string(0) "" 
    [3]=> 
    string(18) "765268556133064704" 
} 

はまた、本当にあなたの表現でdot all pattern modifierを含めるする理由はありません。

S(PCRE_DOTALL

この修飾子が設定されている場合、パターンのドットメタ文字が改行を含むすべての文字と一致。それがなければ、改行は除外されます。この修飾子は、Perlの/ s修飾子と同等です。 [^ a]のような負のクラスは、この修飾子の設定とは関係なく、改行文字と常に一致します。

+0

ありがとうございました。正規表現は完全に動作しますが、これを解析するとjsonからの応答はありませんでした。 $ getcon = file_get_contents( "https://publish.twitter.com/oembed?url=$urlen"); $ con = json_decode($ getcon、true); $ getva = $ con ["url"]; –

+0

「json_decode」はnullを返していますが、[マニュアルにしたがって](http://php.net/json-decode)は失敗を示していますか?それとも、 'file_get_contents'自体が' false'を返したのですか?(マニュアルに従って)(http://php.net/file-get-contents)は失敗を示していますか?コード内でエラー処理を何もしないでください。あなたのコードが毎回完璧に動作するはずであると信じているとき、あなたのコードがここでは予想外に失敗することは、珍しいことでも予期しないことでもありません。 – Sherif

+0

あなたのお返事ありがとうSherif。 PHP初心者です。 json_decodeはnullを返していますが、解析されたツイートのURLは有効です。完璧な結果を得るための最善の方法で私を助けてください。私はjson配列から 'html'を出力し、私のウェブサイトに埋め込みツイートとして表示したいと思います。ありがとう –