2016-08-24 3 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

답장을 보내 주셔서 감사합니다. 제발 PHP 초보자입니다. json_decode가 null을 반환하지만 구문 분석 된 트윗 URL이 유효합니다. 완벽한 결과를 얻으려면 최선을 다해 도와주세요. json 배열에서 'html'을 출력하고 내 웹 사이트에서 Embedded tweet로 표시하고 싶습니다. 감사 –